Docker容器如何设置开机自启

在日常使用 Linux 搭建服务时,很多人会用 ref="/tag/2019/" style="color:#C468A7;font-weight:bold;">Docker 来运行 MySQL、Nginx 或者个人博客。但有个小痛点:每次服务器重启后,这些容器都得手动启动,挺麻烦的。其实,Docker 本身支持容器开机自启,只要配置得当,系统一启动,你的服务就自动跑起来了。

先确认 Docker 服务已开启开机启动

容器想自启,前提是 Docker 服务自己得先能开机启动。大多数 Linux 发行版使用 systemd,执行下面命令即可:

sudo systemctl enable docker

这样 Docker 服务就会随系统启动而运行。

利用重启策略设置容器自启

Docker 提供了 --restart 参数,用来控制容器的重启行为。最常用的是 unless-stopped 策略,意思是除非你手动停止容器,否则它会在系统重启后自动启动。

比如你运行一个 Nginx 容器,可以这样加参数:

docker run -d --restart=unless-stopped --name my-nginx -p 80:80 nginx

这时候就算服务器断电重启,Nginx 容器也会自动拉起来,不用你登录上去再敲命令。

已有容器怎么设置?

如果你已经运行了一个容器,但没加 --restart,也不用删掉重来。Docker 提供了更新命令:

docker update --restart=unless-stopped my-nginx

这条命令就把已存在的容器设成了开机自启,简单直接。

几种重启策略的区别

--restart 支持几个值:

  • no:默认行为,不自动重启
  • on-failure[:max-retries]:仅在容器非正常退出时重启(可选最大重试次数)
  • always:无论什么情况,只要 Docker 在运行,就重启容器
  • unless-stopped:和 always 类似,但如果你曾手动停止容器,就不会再自动启动

一般推荐用 unless-stopped,既保证自动恢复,又保留手动控制权。

实际场景举例

比如你在家里搭了个 NAS,用 Docker 跑了个文件同步服务。白天关机省电,晚上回来发现服务没起来,还得连 SSH 启动,多麻烦。只要提前设置了 --restart=unless-stopped,一通电,服务全就位,就像什么都没发生过。

这个小配置花不了两分钟,却能让自动化程度提升一大截。