Docker Docker 学会让容器开机自启服务

广深-小龙 · 2020年05月09日 · 最后由 孙高飞 回复于 2020年05月09日 · 5882 次阅读

广深小龙亲测重启服务器后 docker 容器没跑起来,相信有不少小伙伴在用 docker 部署容器的时候也发现每次开机服务就没有自启了,需要手动去执行把容器服务开启起来,但有没有可以让它开机自启呢?显然是有的。

一、收集需要自启的容器 id 或 name
1、以 mysql5.7 的容器 name 为例,查询容器:
[root@iZbp19lugf22zbsubsf1y6Z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb665f57e66b mysql:5.7 "docker-entrypoint.s…" 7 days ago Exited (0) 8 minutes ago mysql

2、根据上面的容器 name,我们手动运行启动一下,可多个
[root@iZbp19lugf22zbsubsf1y6Z ~]# docker start mysql
mysql

3、查看已运行的容器,可以看到我们手动是这样的一个操作来完成启动
[root@iZbp19lugf22zbsubsf1y6Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb665f57e66b mysql:5.7 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp mysql

二、利用 shell 脚本来完成手动运行容器命令
1、增加一个 sh 脚本:vi start.sh
[root@iZbp19lugf22zbsubsf1y6Z ~]# vi start.sh

2、编辑一个启动命令把保存退出即可,容器 name 为例:docker start mysql

3、自测一下运行 start.sh 脚本,可以正常启动没问题的。
[root@iZbp19lugf22zbsubsf1y6Z ~]# . start.sh
mysql

三、认识开机自启的文件:/etc/rc.d/rc.local
1、我们将 . start.sh 脚本添加至:/etc/rc.d/rc.local
echo ". ~/start.sh">> /etc/rc.d/rc.local

2、查看是否已添加:cat /etc/rc.d/rc.local

3、设置 rc.local 文件权限:chmod +x /etc/rc.d/rc.local
[root@iZbp19lugf22zbsubsf1y6Z ~]# chmod +x /etc/rc.d/rc.local
[root@iZbp19lugf22zbsubsf1y6Z ~]#

4、完成上面的操作后,就可以:reboot 试一下啦,连接后查看运行中容器:docker ps。
[root@iZbp19lugf22zbsubsf1y6Z ~]# reboot
Press Ctrl+C to cancel or Enter to reconnect immediately.
Reconnecting in 1 seconds...

[root@iZbp19lugf22zbsubsf1y6Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb665f57e66b mysql:5.7 "docker-entrypoint.s…" 22 minutes ago Up 8 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysql

显然这一操作很有必要学会哦,不然每次重启都需要手动去启动,实在太麻烦了。欢迎来 QQ 交流群:482713805
个人博客地址:https://www.cnblogs.com/gsxl/

(注:因为这里是个坑,没有很好认识 docker 参数:--restart=always,创建容器时没有添加参数 --restart=always 导致的后果是:当 Docker 重启时,容器未能自启。
如果前面已经创建容器了那么可以这样:docker container update --restart=always 容器名字)

共收到 3 条回复 时间 点赞

那个。。。。docker run 的时候 --restart=always 这个参数了解一下呗。。。。 或者 docker 配置文件中的--live-restore 参数了解一下😂

就是因为当时不知道,创建容器时没有添加参数 --restart=always 导致的后果是:当 Docker 重启时,容器未能自启。
后面可以这样:docker container update --restart=always 容器名字

广深-小龙 回复

可以 update, 也可以删了重新创建呗。 你总不会没把数据挂载出去吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册