Docker 學會讓容器開機自啟服務

廣深小龍發表於2020-05-09

廣深小龍親測重啟伺服器後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 容器名字)

相關文章