docker容器如何设置自动启动?restart属性设置重启策略
发布于 作者:苏南大叔 来源:程序如此灵动~

其实,这里存在着一个启动链路。系统启动,docker desktop
启动,docker
跟着启动,docker
容器跟着启动,然后就是容器里面的服务启动。本文描述的是:docker
启动后,docker
容器跟随启动的问题。一句话总结的话,就是docker
的restart
参数问题。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,docker@28.0.4
,docker desktop@4.40.0
。在使用Docker
时,经常希望容器能够随Docker
服务的启动而自动启动,这可以通过设置容器的重启策略来实现。
前文回顾
苏南大叔在前面的文章里面,描述了:
docker desktop
不随着系统启动的解决方案。https://newsn.net/say/docker-autostart.htmldocker
安装nginx
/mysql
/php
的问题。https://newsn.net/say/docker-lnmp.html
本文就是基于这两篇文章,展开的。话说,苏南大叔使用docker
搭建了自己的lnmp
组合。但是,存在一个小小的问题,那就是:docker
启动后,它们并不跟随启动,需要再次命令启动容器。
docker ps
命令可以列出所有【运行中】的容器,所以,如果想查看到存在但是没有运行中的容器的话,需要增加【-a
】参数。
如下图所示:
restart可用属性
docker
的restart
属性,表格总结:
重启策略 | 描述 |
---|---|
no | 容器退出时,不重启容器 |
on-failure | 只有在容器非正常退出(退出状态非0)时才重启容器 |
always | 无论容器退出状态如何,都重启容器 |
unless-stopped | 容器退出时总是重启容器,但不考虑在Docker守护进程启动时已经停止的容器 |
所以,可能最好的实践方案是always
。
查看容器的restart属性
通过下面的命令,可以查看restart
属性。
docker inspect -f "{{json .HostConfig.RestartPolicy}}" <your_container_name>
docker inspect --format={{.HostConfig.RestartPolicy.Name}} <your_container_name>
可以看到:没有自动启动的容器,restart
属性(重启策略)为no
。
方案一:创建容器【时指定】restart属性
因为苏南大叔在创建相关容器的时候,已经设置了目录映射。所以,即使删除容器,数据也不会丢失。那么,可以删除容器,重新初始化新的容器。同时,设置--restart=always
。
docker run --restart=always <your_container_name>
方案二:创建容器【后修改】restart属性
如果容器已经启动,可以使用docker update命令来修改重启策略:
在创建好容器后,restart
属性是可以再次修改的。可以使用下面的命令进行修改:
docker update --restart=always <your_container_name>
结语
苏南大叔的docker
系列经验文字,可以参考下面的链接:


