如何在 CVM 上部署 Docker 容器并配置开机自启?

文章导读
在 CVM 上部署 Docker 并实现开机自启,核心是确保 Docker 服务本身随系统启动,同时为容器配置重启策略。
📋 目录
  1. 1. 安装 Docker 引擎
  2. 2. 配置服务与容器自启
  3. 3. 验证是否生效
  4. 4. 常见故障排查
A A

在 CVM 上部署 Docker 并实现开机自启,核心是确保 Docker 服务本身随系统启动,同时为容器配置重启策略。

先说结论:标准做法是通过 systemd 管理 Docker 服务,并为容器添加 `--restart` 参数。

  • 适合:主流 Linux 发行版(CentOS 7+, Ubuntu 20.04+)
  • 先准备:root 权限或 sudo 授权
  • 验收:重启服务器后容器状态为 Up

1. 安装 Docker 引擎

建议使用官方维护的安装脚本,能自动识别系统版本并配置仓库。国内用户建议配置镜像加速,否则拉取镜像可能超时。

# 1. 安装 Docker (官方脚本)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 2. 配置国内镜像加速 (可选但推荐)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-EOF
{
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

注意:不同发行版包管理器不同,CentOS 使用 yum,Ubuntu 使用 apt,但上述脚本已自动处理。若脚本执行失败,可检查网络连接或手动配置仓库。

如何在 CVM 上部署 Docker 容器并配置开机自启?

2. 配置服务与容器自启

Docker 的开机自启分两层:Docker 守护进程随系统启动,业务容器随 Docker 启动。

# 1. 设置 Docker 服务开机自启
sudo systemctl enable docker
sudo systemctl start docker

# 2. 启动容器时指定重启策略
sudo docker run -d `--name` my-app `--restart`=always nginx

# 3. 已有容器修改重启策略
sudo docker update `--restart`=always my-app

策略说明:`--restart`=always 表示无论退出码如何都重启;`--restart`=unless-stopped 表示除非手动停止,否则重启。生产环境推荐前者。

3. 验证是否生效

1. 检查服务状态
运行 systemctl is-enabled docker,返回 enabled 表示服务已设自启。

如何在 CVM 上部署 Docker 容器并配置开机自启?

2. 检查容器配置
运行 docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <容器名称>,应输出 alwaysunless-stopped

3. 重启测试
最稳妥的方法是执行 sudo reboot,等待服务器启动完成后,运行 docker ps 查看容器是否在运行列表中。

4. 常见故障排查

1. 网络依赖问题
如果容器依赖外部网络,而系统启动时网络尚未就绪,容器可能会启动失败。虽然 restart 策略会重试,但可能影响业务恢复速度。复杂场景建议配置 systemd 的 After=network-online.target

如何在 CVM 上部署 Docker 容器并配置开机自启?

2. 磁盘空间不足
开机自启不代表一定能成功启动。如果磁盘满了,Docker 守护进程可能无法写入日志或层数据,导致容器起不来。定期清理无用镜像和容器是必要的。

3. 权限与兼容性问题
部分老旧 CVM 镜像可能使用 SysVinit 而非 systemd。如果遇到 systemctl 命令不存在,需要改用 chkconfig。此外,确保当前用户有 sudo 权限,避免 Permission denied 错误。

4. 资源限制与 OOM
如果容器设置了内存限制,而开机时系统内存紧张,容器可能被 OOM Killer 杀掉。虽然 restart 策略会尝试重启,但可能陷入重启循环。建议配合监控观察重启次数。