要让 docker 容器在宿主机重启后自动运行,需同时启用 docker 服务开机自启并为容器设置重启策略;linux 用 systemctl enable docker,windows/macos 在 docker desktop 中配置登录启动,容器则通过 --restart unless-stopped 等策略实现自动恢复。

要让 Docker 容器在宿主机重启后自动运行,关键不是写脚本或加开机任务,而是用 Docker 原生的重启策略 + 确保 Docker 服务自身开机自启。这两步缺一不可。
确保 Docker 服务开机自启
容器再怎么配,Docker 守护进程没起来,就什么都启动不了。
- 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”
- macOS:Docker Desktop 默认已启用登录启动,无需额外操作
给容器设置合适的重启策略
重启策略决定容器退出或宿主机重启后是否拉起,必须通过 --restart 参数设定。
- unless-stopped:推荐用于大多数服务。宿主机重启后自动启动,但如果你手动执行过 docker stop,它就不会再自动拉起
- always:适合核心服务。只要 Docker daemon 启动,就一定尝试拉起,哪怕你手动停过
- on-failure[:max]:只在非零退出码时重试,适合批处理类任务
- no:默认值,不自动重启
新建容器时直接指定:
docker run -d --restart unless-stopped --name nginx-app -p 80:80 nginx
已有容器补设策略:
docker update --restart unless-stopped nginx-app
批量设置多个容器的重启策略
如果管理多个容器,可一次性更新:
- 更新所有已创建容器(含已停止的):
docker update --restart unless-stopped $(docker ps -aq) - 只更新正在运行的容器:
docker update --restart unless-stopped $(docker ps -q)
验证配置是否生效
- 查看单个容器策略:
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' nginx-app
输出 unless-stopped 即表示设置成功 - 查看容器状态和重启次数:
docker ps --format "{{.Names}}\t{{.Status}}\t{{.RestartCount}}"
RestartCount 非零说明策略已在起作用
不依赖外部脚本,不依赖定时任务,靠 Docker 自身机制就能稳定实现。











