在腾讯云 CVM(云服务器)上跑 Ubuntu 20.04 装 Docker,其实是个非常标准的操作。但作为老鸟,我得提醒你:直接照着网上随便搜的 apt-get install docker.io 或者官方文档一步步走,很容易踩坑,尤其是网络连通性和内核模块加载这块。
下面我把流程拆解一下,重点标出那些“不配置就会报错”的关键点。
1. 基础环境检查与内核模块加载
Ubuntu 20.04 的内核版本通常是 5.4.x,Docker 对 Linux 内核有要求(主要是 cgroups, namespaces, overlayfs 等)。虽然默认内核已经支持大部分功能,但在云环境下,必须确保内核模块被正确加载。
打开终端,执行以下命令检查关键模块是否已加载:
lsmod | grep -E 'overlay|br_netfilter'
- overlay: 用于存储驱动。如果没看到输出,说明没加载。
- br_netfilter: 用于网络桥接和 iptables 规则转发。这个在 Kubernetes 或复杂网络场景下特别重要,Docker 默认也依赖它来做端口映射。
如果缺失,手动加载并设置开机自启:
# 加载模块
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置开机自动加载
echo "overlay" | sudo tee /etc/modules-load.d/overlay.conf
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf
# 为了让 sysctl 参数生效(特别是 br_netfilter),需要设置这些内核参数
cat <<EOF | sudo tee /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
注意:
net.ipv4.ip_forward = 1是必须的,否则容器之间的网络通信以及 NAT 转发会出问题。
2. 系统更新与依赖安装
不要跳过这一步,很多新手因为 apt 源缓存问题导致后续下载失败。
sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common
3. 添加 Docker 官方 GPG 密钥和 APT 源
腾讯云的镜像源虽然快,但 Docker 官方源的软件包版本更新最及时、最稳定。强烈建议直接使用 Docker 官方源,而不是用 Ubuntu 自带的 docker.io 包(那个版本通常很旧,且缺乏最新特性支持)。
步骤如下:
# 1. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 2. 设置稳定版仓库
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 3. 再次更新索引
sudo apt update
4. 安装 Docker Engine
现在可以正式安装了。推荐安装 docker-ce (Community Edition) 和 containerd.io。
sudo apt install -y docker-ce docker-ce-cli containerd.io
安装完成后,启动服务并设置为开机自启:
sudo systemctl start docker
sudo systemctl enable docker
验证安装:
sudo docker run hello-world
如果能正常打印出欢迎信息,说明基础环境没问题。
5. 【关键】腾讯云特有优化:非 root 用户权限 & 镜像提速
A. 允许非 root 用户使用 Docker
默认情况下,只有 root 用户可以运行 docker 命令。为了方便日常开发,建议创建一个 docker 用户组,并将当前用户加入其中。
# 创建 docker 组(如果不存在)
sudo groupadd docker
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 重启会话使配置生效(或者直接注销重新登录)
newgrp docker
# 测试
docker ps
B. 配置国内镜像提速器(必做!)
在国内访问 Docker Hub 速度极慢,甚至经常超时。你必须配置镜像提速器。腾讯云提供了自己的镜像提速器地址,当然阿里云、网易等也可以。
以腾讯云为例(具体地址请以腾讯云控制台实时提供的为准):
- 编辑
/etc/docker/daemon.json:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
- 重启 Docker 服务使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
- 验证配置是否生效:
docker info | grep -i mirror
6. 安全组与防火墙注意事项
这是最容易忽略的一点。
- 腾讯云安全组:如果你要暴露容器的端口(比如 80, 443, 3306 等),必须在腾讯云控制台的“安全组”规则中放行对应端口。仅仅在服务器内部开放端口是没用的,云厂商的网络隔离层会拦截。
- UFW 防火墙:如果你开启了
ufw,也需要确保放行相应端口。但对于生产环境,建议统一由云平台安全组管理,服务器内部保持最小化开放。
7. 常见问题排查
-
问题:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?- 原因:Docker 服务没启动。
- 解决:
sudo systemctl status docker查看状态,必要时sudo systemctl start docker。
-
问题:拉取镜像超时或失败
- 原因:未配置镜像提速器或网络波动。
- 解决:检查
/etc/docker/daemon.json中的registry-mirrors是否正确,并确认网络能访问该域名。
-
问题:权限拒绝
permission denied- 原因:当前用户不在
docker组中。 - 解决:重新执行
usermod -aG docker $USER并重新登录。
- 原因:当前用户不在
总结
在腾讯云 Ubuntu 20.04 上装 Docker,核心就是三步:
- 内核模块加载(特别是
br_netfilter和overlay)。 - 使用官方源安装,不要用系统自带的那个旧版本。
- 配置镜像提速器,否则你的人生会被等待镜像下载耗尽。
按这个流程走,基本不会翻车。如果遇到其他具体问题,再针对性排查。
云技术博客