在腾讯云服务器(CVM)上部署 Docker 遇到问题是常态,尤其是对于刚接触国内云环境的开发者来说。很多时候问题不出在 Docker 本身,而出在系统内核版本、网络配置、安全组策略以及镜像源速度这几个环节。
下面我按排查优先级,梳理几个最常见的问题场景及解决方案。建议先确认你的服务器操作系统是 CentOS 7/8、Ubuntu 18.04/20.04 还是 Debian,不同发行版的包管理命令略有差异,但核心逻辑一致。
1. 安装失败或依赖冲突:内核版本过低
这是新手最容易踩的坑。Docker 对 Linux 内核有最低要求(通常要求 3.10 以上,且需要支持 overlay2 存储驱动)。
- 现象:执行
apt-get install docker-ce或yum install docker-ce时报错,提示缺少依赖,或者安装后启动失败。 - 排查:
uname -r如果内核版本低于 3.10,或者你使用的是腾讯云默认的某些精简版内核,可能需要升级内核。
- 解决:
- 推荐方案:直接使用腾讯云提供的“公共镜像”,这些镜像通常已经预装了较新的内核和必要的模块。如果是自定义镜像,请确保内核版本 >= 3.10。
- CentOS 用户注意:CentOS 7 默认内核可能较老,建议通过
yum update kernel升级并重启。CentOS 8 及以上版本通常没问题。 - Ubuntu 用户注意:Ubuntu 18.04+ 默认内核较新,一般无需额外操作。
2. Docker 服务无法启动:Systemd 报错
-
现象:
systemctl start docker失败,查看日志journalctl -xeu docker发现错误信息如Failed to start Docker Application Container Engine。 -
常见原因:
- SELinux 未关闭或配置不当(主要在 CentOS/RHEL 系)。
- cgroup 驱动不一致:Docker 默认使用
systemdcgroup driver,而某些系统可能配置为cgroupfs。 - 端口占用:宿主机 2375 或 2376 端口被其他进程占用。
-
解决步骤:
- 检查 SELinux:
getenforce如果是
Enforcing,临时关闭测试:setenforce 0。如果问题解决,建议在/etc/selinux/config中设置SELINUX=disabled并重启。 - 统一 cgroup 驱动:
编辑/etc/docker/daemon.json,添加:{ "exec-opts": ["native.cgroupdriver=systemd"] }然后重启 Docker:
systemctl restart docker。 - 清理残留配置:如果之前安装过旧版本 Docker,卸载干净再重装往往比修复更省心。
- 检查 SELinux:
3. 容器内网络不通或网络访问不了:安全组与防火墙
这是国内云环境最典型的问题。腾讯云的安全组(Security Group)是独立于系统防火墙之外的第一道防线。
-
现象:
- 容器内能 ping 通网络,但宿主机无法访问容器暴露的端口(如 80, 3000, 8080)。
- 容器内无法下载软件包(DNS 解析失败或连接超时)。
-
排查与解决:
- 检查腾讯云控制台安全组:
- 登录腾讯云控制台 -> 云服务器 -> 实例列表 -> 点击实例 ID -> 右侧“更多” -> “安全组”。
- 确保入方向规则中放行了你需要使用的端口(例如 TCP 80, 443, 以及你自定义的端口)。注意:默认安全组通常只开放 SSH (22) 和 ICMP。
- 检查系统内部防火墙:
- Ubuntu:
ufw status。如果 active,需放行端口:sudo ufw allow 80/tcp。 - CentOS:
firewall-cmd --list-all。需添加端口:sudo firewall-cmd --zone=public --add-port=80/tcp --permanent && sudo firewall-cmd --reload。
- Ubuntu:
- 容器网络模式:
- 使用
-p hostPort:containerPort时,确保没有端口冲突。 - 如果使用
bridge模式(默认),确保路由正常。可以尝试在容器内ping baidu.com测试 DNS。如果 DNS 不通,修改/etc/docker/daemon.json添加 DNS 配置:{ "dns": ["223.5.5.5", "119.29.29.29"] }(使用阿里 DNS 或腾讯 DNSPod 在国内更快更稳定)
- 使用
- 检查腾讯云控制台安全组:
4. 镜像拉取慢或失败:镜像源问题
Docker Hub 官方源在国内访问不稳定,经常超时或拉取失败。
- 现象:
docker pull nginx卡住很久或直接报错context deadline exceeded。 -
解决:
配置国内镜像提速器。推荐使用阿里云、腾讯云或 DaoCloud 提供的提速器地址。- 获取你的专属提速地址(以阿里云为例):
- 登录阿里云容器镜像服务 -> 镜像工具 -> 镜像提速器。
- 复制类似
https://xxxxxx.mirror.aliyuncs.com的地址。
- 修改 Docker 配置:
编辑/etc/docker/daemon.json(如果不存在则创建):{ "registry-mirrors": ["https://你的专属提速地址"], "live-restore": true } - 重启 Docker:
systemctl daemon-reload systemctl restart docker
- 获取你的专属提速地址(以阿里云为例):
5. 权限问题:非 root 用户运行 Docker
- 现象:普通用户执行
docker ps提示permission denied。 - 解决:
Docker 守护进程绑定的是 Unix socket/var/run/docker.sock,默认属于root用户。- 方法一(推荐用于开发):将用户加入
docker组。sudo usermod -aG docker $USER注意:需要重新登录会话才能生效。
- 方法二:使用
sudo执行命令(不推荐日常使用,但简单直接)。
- 方法一(推荐用于开发):将用户加入
6. 磁盘空间不足:Volume 目录占满
- 现象:容器启动失败,日志中出现
no space left on device。 - 排查:
df -h /var/lib/dockerDocker 默认数据目录在
/var/lib/docker,如果根分区太小,很容易爆满。 - 解决:
- 清理无用资源:
docker system prune -a(谨慎使用,会删除所有停止的容器、未使用的网络和悬空镜像)
- 迁移数据目录:
如果根分区确实小,可以将/var/lib/docker软链接到更大的数据盘。# 示例:假设新数据盘挂载在 /data systemctl stop docker mv /var/lib/docker /data/docker_backup ln -s /data/docker_backup /var/lib/docker systemctl start docker
- 清理无用资源:
总结与建议
- 先看日志:
journalctl -u docker.service -f是最直接的调试工具。 - 查安全组:90% 的网络不通问题源于腾讯云控制台的安全组未放行端口。
- 换镜像源:配置国内提速器是提升体验的关键一步。
- 保持系统更新:尽量使用腾讯云推荐的最新 LTS 版本操作系统镜像,避免内核兼容性问题。
如果遇到具体报错代码,可以提供完整的错误信息,我可以进一步帮你定位。
云技术博客