宿主机重启后Docker容器默认不自启,需配置restart policy;创建时用--restart always/unless-stopped,或用docker update补设,并确保docker服务systemctl enable启用。

宿主机重启后,Docker 容器默认不会自动启动,除非显式设置了重启策略(restart policy)。DockerStart 并不是一个内置命令或工具,可能是你指代 docker start 手动操作,或误写了某个脚本/工具名。真正起作用的是容器创建时配置的 restart policy。
确认并设置容器的重启策略
Docker 提供了多种 restart policy,控制容器在退出或系统重启后的行为。关键在于:该策略需在容器 创建时(docker run)或更新时(docker update)指定,运行中无法通过 docker start 添加。
- no:默认值,不自动重启(包括宿主机重启后)
- on-failure[:max-retries]:仅当容器非 0 退出码退出时重启
- always:无论退出原因或宿主机是否重启,都尝试重启容器
-
unless-stopped:类似 always,但跳过被手动
docker stop停止的容器
例如,创建一个开机自启的 Nginx 容器:
docker run -d --restart unless-stopped --name mynginx -p 80:80 nginx
若容器已存在但未设策略,可用 docker update 补上:
docker update --restart unless-stopped mynginx
确保 Docker 服务本身开机自启
即使容器设了 always 或 unless-stopped,如果 Docker daemon 没有随系统启动,容器也无法拉起。
- Linux(systemd 系统)执行:
sudo systemctl enable docker - 验证状态:
systemctl is-enabled docker应返回enabled - 重启后检查:
systemctl status docker确保 active (running)
检查容器是否真被“自动拉起”
宿主机重启后,容器可能因依赖(如网络、挂载卷、端口冲突)启动失败,此时 Docker 会不断重试(取决于策略),但 docker ps 可能看不到它——需查 docker ps -a 和日志:
- 查看最近退出的容器:
docker ps -a --filter "status=exited" --format "{{.Names}} {{.Status}}" - 查启动失败原因:
docker logs或journalctl -u docker -n 50 --no-pager - 常见问题:宿主机端口被占、volume 路径不存在、--network bridge 依赖的网桥未就绪(一般几秒内自动恢复)
避免用脚本轮询替代 restart policy
不推荐写 systemd service 或 crontab 脚本来定期 docker start 某容器——这绕过了 Docker 的生命周期管理,易引发重复启动、状态混乱、健康检查失效等问题。正确做法始终是:建容器时配好 --restart,并确保 Docker daemon 自启。










