关键在于Docker服务开机自启与容器重启策略协同:先执行sudo systemctl enable docker确保守护进程随系统启动,再用docker run -d --restart unless-stopped或docker update --restart unless-stopped配置容器,二者缺一不可。

容器跟随 Docker 服务自启动,关键在两层配置:Docker 服务本身开机自启 + 容器设置合适的重启策略。缺一不可。
确保 Docker 服务开机自动启动
Docker 守护进程(docker.service)必须随系统启动而就绪,否则容器根本没机会启动。
- 检查当前状态:
systemctl is-enabled docker—— 返回 enabled 表示已配置 - 若未启用,执行:
sudo systemctl enable docker.service - 顺便确认服务正在运行:
sudo systemctl status docker,如显示 inactive,补上sudo systemctl start docker
为容器设置 restart 策略
容器是否在 Docker 启动后自动拉起,取决于它的重启策略,而非“依赖 Docker 服务”这种逻辑关系。
-
新建容器时直接指定:
docker run -d --restart=always --name nginx nginx:alpine -
已有容器补设策略:
docker update --restart=always nginx(替换为你的容器名或 ID) - 常用策略说明:
• always:Docker 启动后必启动该容器,且异常退出后也立即重启
• unless-stopped:Docker 启动后启动容器,但如果你手动docker stop过,它就不会再自动启(更可控)
• on-failure[:max-retries]:仅非零退出码时重启,适合调试或临时服务
验证容器是否生效
策略设好后,不能只看命令返回,要实测或查状态。
- 查看某容器当前策略:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' nginx→ 应输出 always - 查看所有容器的重启策略和状态:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RestartCount}}" - 模拟验证:重启 Docker(
sudo systemctl restart docker),稍等几秒后运行docker ps,确认目标容器已在列表中且状态为 Up
使用 Docker Compose 的情况
如果你用 docker-compose.yml 管理服务,直接在每个 service 下加 restart: always 即可:
services:
db:
image: postgres:15
restart: always
api:
build: .
restart: unless-stopped
部署时用 docker-compose up -d,后续 Docker 重启后,这些服务也会按策略自动恢复。


















