核心是容器设重启策略且docker服务开机自启:新建容器用--restart=unless-stopped,已有容器用docker update --restart=unless-stopped;docker服务需执行systemctl enable docker并确认is-enabled返回enabled。
设置 docker 容器开机自动启动,核心是两件事:容器本身配置重启策略,且 docker 服务必须随系统开机自启。缺一不可,否则即使设了策略也无效。
新建容器时直接加 --restart 参数
这是最推荐、最稳妥的方式,策略从容器诞生起就生效,不会遗漏。
-
--restart=unless-stopped:最常用。宿主机重启后自动拉起容器;但如果你手动执行过
docker stop,它就不会再自动启动,避免误恢复已停用的服务 - --restart=always:Docker daemon 启动就强制拉起,不管是否被手动停过。适合数据库、Redis 等必须持续运行的核心服务
- --restart=on-failure[:max]:只在容器异常退出(非零退出码)时重试,可选限制最大重试次数,适合批处理或任务型容器
- --restart=no:默认值,不自动重启,适合调试或临时测试容器
示例命令:
docker run -d --restart unless-stopped --name myapp -p 8080:80 nginx给已运行的容器补设重启策略
如果容器已经创建并运行,但没设自启,可用 docker update 补上,无需删掉重建。
- 设为 unless-stopped:
docker update --restart unless-stopped myapp - 设为 always:
docker update --restart always redis-db - 取消自启(恢复默认):
docker update --restart no test-container
确保 Docker 服务本身开机自启
容器自启依赖 Docker 守护进程先运行。若 Docker 服务没开机自启,容器策略再全也没用。
- Linux(systemd 系统):
sudo systemctl enable docker - 验证是否生效:
systemctl is-enabled docker→ 应返回enabled - Windows(PowerShell):
Set-Service -Name "Docker" -StartupType Automatic
用 docker-compose 统一管理更省心
适合多容器协作场景(如 Web + DB + Cache),在 docker-compose.yml 中声明即可:
web:
image: nginx
restart: unless-stopped
ports:
- "80:80"
db:
image: mysql:8.0
restart: always
environment:
- MYSQL_ROOT_PASSWORD=123
然后用 docker-compose up -d 启动,所有服务自动带上对应策略。











