docker執(zhí)行shell腳本 如何避免Docker容器啟動腳本運行后自動退出?
如何避免Docker容器啟動腳本運行后自動退出?避免自動退出的解決方案在運行docker容器啟動腳本后,docker run指定的命令如果不是已掛起的命令(如運行top和不斷回音),將自動退出。-“d
如何避免Docker容器啟動腳本運行后自動退出?
避免自動退出的解決方案在運行docker容器啟動腳本后,docker run指定的命令如果不是已掛起的命令(如運行top和不斷回音),將自動退出。-“d”命令將“detach”設(shè)置為true。根據(jù)官方文件,這意味著讓這個命令在后臺運行,但它并不是一直運行的(我們在普通的Linux終端上運行/bin/bash,運行后就會完成,而且我們不會一直等待響應(yīng),所以我們真的不能以“守護進程”的方式運行/bin/bash)。這個地方的早期和現(xiàn)在的官方文件確實有些不一致?,F(xiàn)在是分離。早期的文檔說指定-D以守護進程的方式運行容器可能有一些誤解。另外,如果需要在容器中運行bash,可以直接運行docker run-I-t containeruname/bin/bash。如果您認(rèn)為docker attach的參數(shù)多于docker attach,則可以設(shè)置別名來解決此問題:
如何避免Docker容器啟動腳本運行后自動退出?
運行多進程docker容器的方法如下:1。使用shell腳本依次啟動kubernetes的每個組件。以下是開始-庫伯內(nèi)特斯.sh2,然后在dockerfile中,開始-庫伯內(nèi)特斯.sh指定默認(rèn)情況下要為docker容器執(zhí)行的命令。三。需要注意的一點是開始-庫伯內(nèi)特斯.sh腳本將作為docker容器的1號進程運行,并且必須始終運行。因為docker容器只在進程1運行時保持運行,換句話說,docker容器將在進程1退出后退出。因為kubernetes的每個組件都是作為后臺進程執(zhí)行的,所以在腳本的末尾添加了一個死循環(huán)以保持啟動-庫伯內(nèi)特斯.sh腳本始終在運行。4主管是一種過程管理工具。此時,需要編寫管理器配置文件庫伯內(nèi)特斯.conf: 5. 將kubernetes的每個組件的啟動命令設(shè)置為command。將autorestart參數(shù)設(shè)置為true意味著supervisor將負(fù)責(zé)重新啟動意外退出的組件。stdout Logfile和stderr Logfile參數(shù)可用于設(shè)置命令的標(biāo)準(zhǔn)輸出文件和標(biāo)準(zhǔn)錯誤輸出文件。6然后,在dockerfile中,指定supervisor作為docker容器的默認(rèn)命令:7。此時,supervisor是docker容器中的第一個進程,它還需要繼續(xù)運行。當(dāng)nodaemon設(shè)置為true時,supervisor將保持在前臺而不是后臺運行。如果主管在后臺運行,docker容器將在執(zhí)行supervisor命令后立即退出。
~]#docker run-M 512M-memory swap 1g-it-P 58080:8080-restart=always
-name bvrfis-logdata中的卷mytomcat:4.0/root/run.sh
--重新啟動特定參數(shù)值詳細(xì)信息:
否-當(dāng)容器退出時,不要重新啟動容器;
失敗時-僅當(dāng)容器以非零狀態(tài)退出時重新啟動容器;
始終-無論退出狀態(tài)如何重新啟動容器;
如果要在打開容器時自動啟動docker容器中的應(yīng)用程序服務(wù)。只需在dockerfile中編寫服務(wù)啟動腳本,然后使用dockerfile重建映像:
編寫應(yīng)用程序服務(wù)自啟動腳本
編寫dockerfile
重建映像
打開容器