[英]Why does one of my Docker containers not start automatically on machine boot?
我有兩個Docker容器,一個用於運行Jenkins實例,另一個用於運行YouTrack 。 它們各自的啟動腳本如下所示:
Jenkins: docker run --name jenkins_master --restart on-failure -p 8080:8080 -p 50000:50000 -v /home/ci/jenkins_home/:/var/jenkins_home -d jenkins:latest
YouTrack:docker docker run --name youtrack --restart on-failure -p 8081:80 -v /home/ci/youtrack/data/:/opt/youtrack/data/ -v /home/ci/youtrack/backup/:/opt/youtrack/backup -d uniplug/youtrack
如您所見,沒有什么特別之處,有一些端口映射和一些-v
。
我希望它們在啟動PC時開始運行。 Docker文檔指出: “ Docker提供了重啟策略來控制您的容器在退出時還是在Docker重新啟動時自動啟動。 ”
當我啟動機器時Docker“重新啟動”時,由於--restart on-failure
,我假定兩個容器都在啟動時運行。 但是只有Jenkins開始在端口8080上運行,重新啟動計算機時,我必須手動啟動YouTrack。
如何避免手動啟動容器?
重新啟動PC時,docker守護程序執行的操作是嘗試停止正在運行的容器。 這就像在所有正在運行的容器上運行docker stop
,這就是發生的情況(從此處獲取 ):
當您發出docker stop命令時,Docker首先會很好地要求停止該過程,如果它在10秒內不符合要求,它將強行殺死它。 如果您曾經發布過docker stop並且必須等待10秒才能返回命令,那么您已經看到了這一點
docker stop命令首先嘗試通過向容器中的根進程(PID 1)發送SIGTERM信號來停止正在運行的容器。 如果該進程在超時時間內仍未退出,則將發送SIGKILL信號。
對於您的容器,您指定了--restart on-failure
,這意味着--restart on-failure
守護程序僅在退出時退出狀態> 0時才重新啟動容器。 我對您的問題的猜測是,您的youtrack容器正確響應docker守護程序給出的SIGTERM信號,並干凈退出(退出狀態0)。 在相反的一側,詹金斯容器不能干凈地退出。 因此,只有jenkins容器會在重新引導時重新啟動。
要解決此問題,您可以使用--restart always
標志運行容器, --restart always
容器都將重新啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.