家里用树莓派搭了个小ref="/tag/414/" style="color:#C468A7;font-weight:bold;">服务器,跑着几个常用的Docker容器,比如博客、下载工具和内网穿透。每次断电重启后,总得一个个手动启动容器,挺烦人的。后来发现Docker其实支持自动启动,配置好之后,系统一开机,服务全就位,跟没断过一样。
容器为啥不会自己启动?
默认情况下,Docker创建的容器在系统重启后并不会自动运行。你得登录进去,再敲一遍 docker start 容器名 才能恢复服务。对经常断电或者远程部署的小设备来说,这体验太差。
一行命令解决烦恼
其实在启动容器的时候加个参数就能搞定——--restart。这个选项告诉Docker:不管因为啥停了,都给我自动拉起来。
比如你运行一个Nginx容器,可以这样写:
docker run -d --name my-nginx --restart=always -p 80:80 nginx
这里的 --restart=always 就是关键。只要Docker服务本身启动了,这个容器就会跟着跑起来。
几种重启策略选一选
--restart 其实有几种模式:
- no:默认行为,不自动重启
- on-failure[:max-retries]:只有容器非正常退出时才重启,比如程序崩溃。还可以指定最多重试几次
- always:无论怎么停,都自动启动
- unless-stopped:类似always,但如果手动执行了
docker stop,那就不自动启动
家用场景推荐用 unless-stopped。比如你想临时关掉某个服务调试一下,又不想下次重启它还冒出来。
已经运行的容器也能改
如果你的容器早就跑起来了,不用删掉重做。直接更新策略就行:
docker update --restart=unless-stopped my-nginx
这条命令把名为 my-nginx 的容器改为“除非我手动停,否则都得启动”的模式。改完之后,哪怕系统重启,服务照样在线。
实际用起来真省心
我家那个下载机自从加上了自动启动,老婆再也不用问我:“为啥迅雷又连不上了?” 系统重启、停电恢复,所有服务默默归位,像什么都没发生过。这种小细节,用好了真的提升幸福感。