每次服务器重启后,都要手动一个个启动ref="/tag/2019/" style="color:#EB6E00;font-weight:bold;">Docker容器,确实挺烦的。尤其是做备份任务的容器,比如用rsync或borg定期同步数据的,一旦没跑起来,数据安全就悬了。其实Docker本身支持容器自动启动,只要在运行时设置好重启策略,系统一恢复,容器自己就跑起来了。
三种重启策略选一个
Docker提供--restart参数来控制容器何时重启,常用选项有三个:
- no:默认行为,不会自动重启
- on-failure[:max-retries]:仅在容器非正常退出时重启,可指定最大重试次数
- always:无论什么情况,只要守护进程运行着,就尝试重启
- unless-stopped:类似always,但若手动停止容器,则不会自动拉起
对于备份类容器,推荐使用unless-stopped。这样既能在服务器重启后自动运行,又允许你在维护时手动停掉它而不被打扰。
启动容器时加上重启策略
比如你有一个打包备份的容器,镜像叫backup-tool:latest,想让它开机自启:
docker run -d \
--name backup-job \
--restart unless-stopped \
-v /data:/backup/data \
backup-tool:latest
这样只要Docker服务随系统启动(通常默认开启),这个容器就会跟着起来。
已有容器怎么加?
如果容器已经创建好了,别急着删。可以用update命令直接修改:
docker update --restart unless-stopped backup-job
这条命令不会重启容器,只是更新元信息。下次真正重启系统时,策略才会生效。
验证是否设置成功
查看容器详情,确认RestartPolicy有没有改对:
docker inspect backup-job | grep -i restart -A 5
输出里能看到"Name": "unless-stopped"就说明没问题。
举个实际场景:公司NAS每天凌晨用Docker跑一次增量备份到异地服务器。某天停电重启后,运维没到场,但因为设置了自动启动,备份按时执行,避免了数据丢失。这种小配置,关键时刻真能省大心。
记住一点:自动启动依赖Docker服务自身开机自启。CentOS、Ubuntu这些主流系统安装Docker后一般会自动注册systemd服务,但最好还是检查一下:
sudo systemctl is-enabled docker
如果不是enabled,补上这句:
sudo systemctl enable docker
搞定之后,再也不用担心重启后容器“失联”了。