在日常使用 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,一通电,服务全就位,就像什么都没发生过。
这个小配置花不了两分钟,却能让自动化程度提升一大截。