创建带自启动策略的 docker 容器需在 docker run 时指定 --restart=unless-stopped,该策略使容器随宿主机重启自动启动,但尊重手动 stop;其他策略包括 always、on-failure[:max] 和 no,应按服务性质选用,并确保 docker 服务已启用开机自启。

创建带自启动策略的 Docker 容器,关键是在 启动容器时直接指定 --restart 参数,而不是等容器运行后再补设。这样能确保策略从容器诞生起就生效,避免遗漏或误操作。
推荐使用 --restart=unless-stopped
这是最常用也最稳妥的策略:宿主机重启后自动拉起容器,但如果你手动执行过 docker stop,它就不会再自动启动,避免意外恢复已停用的服务。
- 新建容器并启用该策略:
docker run -d --restart unless-stopped --name myapp -p 8080:80 nginx - 参数顺序不敏感,但
--restart必须放在docker run命令中,不能加在镜像名之后 - 若省略
--restart,默认值为no,即不会自启
其他常用重启策略及适用场景
根据服务性质选择合适策略,避免一概用 always:
- always:Docker daemon 启动就拉起,不管是否被手动停过。适合数据库、消息队列等必须持续可用的核心服务
- on-failure[:max]:只在非零退出码时重试(如程序崩溃),可选限制最大重试次数,适合批处理或任务型容器
- no:完全不自动重启,适合调试、临时测试类容器
别忘了确保 Docker 服务本身开机自启
容器自启依赖 Docker 守护进程先运行。Linux 下执行:
-
sudo systemctl enable docker(启用开机自启) -
sudo systemctl is-enabled docker(验证返回enabled) - 若未启用,容器即使设了
--restart,宿主机重启后也不会启动
验证策略是否生效
创建后快速确认设置正确:
- 查单个容器:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' myapp→ 应输出unless-stopped - 查所有容器策略:
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.RestartPolicy}}"











