核心是容器设重启策略且Docker服务开机自启:新建容器用--restart=unless-stopped,已有容器用docker update --restart=unless-stopped 容器名;Docker服务需执行systemctl enable docker并确认is-enabled返回enabled。

要让 Docker 容器在宿主机重启后自动启动,核心就两点:容器本身配置重启策略,且 Docker 服务必须开机自启。不是靠手动执行 docker start,也不是写脚本轮询,而是用 Docker 原生的 --restart 机制。
设置容器的重启策略
该策略决定容器退出或系统重启后是否拉起,必须在创建时指定,或用 docker update 补设:
-
推荐
unless-stopped:宿主机重启后自动启动,但如果你手动执行过docker stop,它就不会再拉起,避免误恢复 -
always:不管有没有被手动停过,只要 Docker daemon 启动就尝试拉起(适合关键服务) -
on-failure[:max]:只在非零退出码时重试,适合一次性任务 -
no:默认值,不自动重启
新建容器时加参数:docker run -d --restart unless-stopped --name myapp -p 8080:80 nginx
已存在容器补设:docker update --restart unless-stopped myapp
确保 Docker 服务开机自启
容器再怎么配,Docker daemon 不启动,一切归零:
- Linux(systemd):
sudo systemctl enable docker - 验证是否生效:
systemctl is-enabled docker应返回enabled - 检查当前状态:
systemctl status docker应为active (running) - Windows:Docker Desktop 设置中勾选“Start Docker Desktop when you log in”;或通过任务计划程序/注册表/启动文件夹配置自动启动
验证与排错要点
重启后没看到容器?别急着重装,先查这几项:
- 运行
docker ps -a,看容器是否在列表里但状态是exited - 查重启策略:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' myapp - 看失败原因:
docker logs myapp或journalctl -u docker -n 30 - 常见卡点:端口被占用、挂载目录不存在、依赖网络未就绪(如自定义 bridge 网络通常几秒内恢复)
多容器场景建议用 Docker Compose
多个关联服务(如前端+后端+数据库)不建议逐个 run,统一管理更可靠:
在 docker-compose.yml 中声明重启策略:
version: '3.8'
services:
web:
image: nginx
restart: unless-stopped
ports: ["80:80"]
db:
image: postgres:15
restart: always
environment:
POSTGRES_PASSWORD: example
然后执行:docker-compose up -d,策略即生效。后续可配合 systemd unit 或 compose-switch 实现开机自动部署。


















