在腾讯云的 Debian 实例上装 Docker,别整那些花里胡哨的一键脚本,最稳妥、最符合生产环境规范的做法还是走官方源。很多人喜欢用 apt install docker.io,那是 Debian 仓库自带的旧版本,不仅功能不全,还容易跟内核模块冲突,千万别这么干。
咱们按标准流程来,分几步走,确保你装的是最新稳定版,而且后续升级不出幺蛾子。
第一步:清理旧环境(如果有)
如果你之前乱搞过,或者从别的教程复制粘贴过命令,先做个清洁工。
sudo apt-get remove docker docker-engine docker.io containerd runc
这一步是为了防止残留的配置文件或旧包与新版本冲突。如果提示没找到包,直接跳过即可。
第二步:安装依赖和配置 GPG 密钥
Docker 官方源是 HTTPS 加密的,所以得先让系统信任这个源。
- 更新软件包索引并安装必要工具:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
- 添加 Docker 官方的 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
注意:这里用的是 /etc/apt/keyrings,这是较新版本 Debian 推荐的路径,比以前的 /usr/share/keyrings 更规范。
- 设置 Docker 的稳定版源:
你需要确认你的 Debian 版本代号(比如 bookworm, bullseye 等)。运行 lsb_release -cs 查看。假设你是最新的 Debian 12 (bookworm),命令如下:
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
如果你不确定版本号,可以直接写死为当前主流版本,或者用下面这个更通用的判断逻辑(适合自动化脚本):
DISTRO=$(. /etc/os-release && echo $VERSION_CODENAME)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian ${DISTRO} stable" | sudo tee /etc/apt/sources.list.d/docker.list
第三步:安装 Docker Engine
现在源配好了,开始装货。
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
这里重点装的是 docker-ce(社区版),以及配套的 CLI 工具和容器运行时 containerd.io。docker-compose-plugin 是新版推荐的编排插件方式,替代了以前单独的 docker-compose 二进制文件。
第四步:验证安装
装完后,先看看版本:
docker --version
docker compose version
然后跑个 Hello World 测试一下核心功能是否正常:
sudo docker run hello-world
如果看到 “Hello from Docker!” 并且没有报错,说明基础环境没问题。
第五步:关键优化——免 sudo 运行
在生产环境中,每次输密码敲 sudo 很麻烦,而且有些应用权限管理要求严格。建议把当前用户加入 docker 组。
- 创建 docker 组(通常已存在):
sudo groupadd docker
- 将你的用户加入该组:
sudo usermod -aG docker $USER
注意:修改完用户组后,必须注销并重新登录,或者重启服务器,新的组权限才会生效。这点很容易被忽略,导致后面执行 docker 命令时依然报 permission denied。
- 验证:
新开一个终端窗口,直接运行:
docker ps
如果不报错且能列出容器列表,说明配置成功。
第六步:腾讯云特有注意事项
在云服务器上,尤其是国内厂商,有几个坑得避开:
-
防火墙与安全组:
Docker 默认使用 bridge 网络,宿主机端口映射是通过 iptables/nftables 实现的。腾讯云的安全组是在网络层拦截的,所以如果你在 Docker 里开了 80 端口,记得去腾讯云控制台 -> 实例详情 -> 安全组规则里,入方向放行 TCP 80 端口。否则网络访问不了。 -
IPv6 问题:
很多腾讯云新实例默认开启了 IPv6。Docker 对 IPv6 的支持在某些旧版本或特定配置下会有问题(比如容器无法获取 IPv6 地址,或者 DNS 解析异常)。如果遇到网络不通的问题,检查/etc/docker/daemon.json,可以尝试暂时禁用 IPv6:{ "ipv6": false, "fixed-cidr-v6": "..." }或者直接注释掉相关 IPv6 配置,优先保证 IPv4 连通性。
-
存储驱动选择:
Debian 默认文件系统通常是 ext4 或 xfs,Docker 默认的 overlay2 存储驱动在这些文件系统上表现良好。不需要额外调整。但如果你的数据盘格式特殊(比如 btrfs),可能需要指定存储驱动,不过一般云服务器不会这么折腾。 -
开机自启:
确保 Docker 服务随系统启动:sudo systemctl enable docker sudo systemctl start docker
常见问题排查
-
Error response from daemon: dial unix docker.raw.sock: connect: no such file or directory
这说明 Docker 守护进程没起来。检查状态:sudo systemctl status docker。如果没启动,看日志journalctl -u docker.service。常见原因是磁盘空间满了(df -h检查一下根分区),或者之前的残留进程卡住了。 -
Permission denied when trying to start containers
90% 是因为你还没注销重登,或者用户没加到 docker 组。再次确认groups $USER是否包含 docker。 -
DNS 解析慢或失败
国内服务器访问 Docker Hub 有时会被干扰。可以在/etc/docker/daemon.json中配置镜像提速器。腾讯云有自己的镜像提速地址,通常在控制台“容器镜像服务”里能找到。例如:{ "registry-mirrors": ["https://mirror.ccs.tencentyun.com"] }改完后重启 Docker:
sudo systemctl restart docker。
总结来说,走官方源、配好 GPG、加用户组、开安全组,这四步到位,Debian 上的 Docker 就能稳稳当当跑起来。别信网上那些 curl -sSL https://get.docker.com | sh 的一键脚本,虽然方便,但在生产环境里,你知道每一步在干什么,才不会被半夜的故障搞崩溃。
云技术博客