簡體   English   中英

為什么我的一個Docker容器在機器啟動時無法自動啟動?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM