Docker容器自启动设置:让你的服务崩溃后自动恢复

开始前的准备


在动手之前,先确认你满足以下条件:



  • 已安装 Docker(官方版本 19.03 及以上)

  • 拥有服务器 root 或 sudo 权限

  • 如果使用宝塔面板,需要已安装【Docker 管理器】插件(版本 1.6 以上)


提示:本文所有命令均在 CentOS 7.9 下测试通过,Ubuntu/Debian 同样适用。

两种实现Docker容器自启动的方法


Docker 容器自启动的核心是利用 --restart 策略。

你可以在创建容器时设置,也可以对已有容器追加

下面分别讲解。


方法一:创建新容器时启用自启动


最直接的方式是在 docker run 时加上 --restart 参数。

推荐使用 alwaysunless-stopped


docker run -d --name my-nginx --restart always nginx:latest


  • always:只要 Docker 守护进程启动,容器就自动重启。即使你手动 docker stop 过,下次 Docker 重启时依然会启动。

  • unless-stopped:手动停止过的容器,Docker 重启时不会自动启动。更符合日常运维习惯。


建议:对于数据库、Web 服务等核心应用,用 always

对临时调试容器用 unless-stopped 避免误重启。


方法二:让已有容器具备自启动能力


如果你已经有一个正在运行的容器(比如 my-app),可以用 docker update 命令修改重启策略。


docker update --restart always my-app

之后该容器就会自动启用自启动。

无需重建容器,零中断影响。


宝塔面板用户:在【Docker】->【容器管理】中找到对应容器,点击【设置】,在“重启策略”下拉框中选择“始终重启”或“除非手动停止”,保存即可。

操作可视化,无需记命令。


如何验证自启动是否生效


设置完成后,必须验证才能放心。

以下是三种验证方式。


1. 检查容器详情


docker inspect my-app --format '{{.HostConfig.RestartPolicy.Name}}'

返回值应为 alwaysunless-stopped,而不是空字符串。


2. 模拟服务器重启


sudo reboot

等待服务器恢复后,登录执行:


docker ps

查看目标容器是否在运行列表中。

如果显示状态 Up 且时间与当前时间接近,说明自启动生效。


3. 模拟容器进程崩溃


docker kill my-app   # 强制杀死容器
sleep 3
docker ps

如果看到容器自动重启(状态中的 Uptime 重置),说明 always 策略工作正常。


注意:Kill 后 Docker 会标记重启状态,如果你的策略是 on-failure:5(最多重启5次),则需测试多次。

高频问题与避坑提醒


Q1:为什么容器重启策略设置为 always,但重启后还是没启动?



  • 检查 Docker 服务本身是否设置为开机自启


sudo systemctl enable docker


  • 如果 Docker 服务没有自启,容器策略再正确也没用。

  • 如果是通过 docker compose 启动的容器,需要同时检查 docker-compose.ymlrestart 字段。


Q2:restart: unless-stoppedrestart: always 到底选哪个?



  • always:Docker 重启后无条件启动容器(包括手动停掉的)。适合生产环境关键服务。

  • unless-stopped:手动停掉的容器不会随 Docker 重启。适合开发/临时环境。

  • on-failure[:max-retries]:仅在容器因错误退出时重启(退出码非0),可设置重试次数。


Q3:宝塔面板里设置了自启动,但实际没效果?


检查宝塔的 Docker 插件版本,部分旧版插件未同步重启策略。

建议在宝塔中查看容器配置里的“重启策略”是否已保存成功;

如果不放心,用 docker inspect 命令二次确认。


避坑清单



  • ⚠️ 不要对数据库容器随意使用 --restart always,如果容器因数据损坏频繁重启,可能导致死循环。建议先设置为 on-failure:2 限制重启次数。

  • ⚠️ Docker 重启策略仅在 Docker 守护进程启动时生效,如果物理机宕机后 Docker 未先正确启动,需人工介入。

  • ⚠️ 使用 docker update 修改后的容器,原有环境变量和挂载卷不受影响,放心操作。


总结


Docker容器自启动设置只有一行命令或一次面板点击的成本,却能在服务器意外重启时挽救你的业务。

推荐新手先用 docker run --restart unless-stopped 创建测试容器,熟悉后再应用到生产环境。

遇到任何异常,优先检查 Docker 服务自启状态。

分享到:
上一篇
GPT-5.5咋用?手把手教你从零调用新模型
下一篇
服务器负载均衡Nginx:新手也能搞定的Nginx服务器负载
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意