哪些映像 dockerd 會自動啟動?

哪些映像 dockerd 會自動啟動?

一旦我在 Ubuntu 盒子上重新啟動了 docker 服務,service docker restart它就啟動了一些我沒想到它會啟動的容器。

這是為什麼?哪個設定檔/儲存/任何內容保存有關應啟動哪些映像的資訊?

當我用 . 列出它們時,我有很多圖像(~50)docker images。但當我啟動時只有 8 個啟動dockerd。為什麼?我該如何解決這個問題?

謝謝。

答案1

對於單一容器,您可以套用重新啟動策略。這是docker run --restart=...在啟動容器時設定的,或是restart: ...compose yml 檔案中的一行。您可以使用以下命令變更現有容器中的重新啟動策略:

$ docker update --restart=... ${container_name_or_id}

若要列出所有容器及其重新啟動策略,您可以從 bash 執行以下命令:

$ docker container ls -q | \
  xargs docker container inspect --format \
          '{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'

重啟政策你可以使用的是:

容器退出時不要自動重新啟動。這是預設值。

失敗時[:最大重試次數] 僅當容器以非零退出狀態退出時才重新啟動。 (可選)限制 Docker 守護程式嘗試重新啟動的次數。

總是 無論退出狀態如何,請始終重新啟動容器。當您指定always時,Docker守護程序將嘗試無限期地重新啟動容器。無論容器的當前狀態如何,容器也將始終在守護程序啟動時啟動。

除非停止 無論退出狀態如何,請始終重新啟動容器,但如果容器之前已處於停止狀態,則不要在守護程序啟動時啟動它。

always即使您有意停止了容器,在 docker 守護程式重新啟動後,重新啟動策略也會導致容器意外重新啟動(如您所見)。因此,我通常會建立具有unless-stopped重新啟動策略的獨立容器。


如果您使用 docker swarm 模式,那麼只要目標狀態與目前狀態不匹配,服務就會自動啟動一個新容器。對於筆記型電腦中常見的單節點 swarm 集群,這意味著當您重新啟動 docker 時,容器將重新啟動,如果您只是停止或刪除正在運行的容器,容器也會重新啟動。

永久停止並刪除服務:

$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}

如果某個服務配置了複製模式,而您只是想暫時停止它而不刪除該服務,則可以將目標副本更新為 0:

$ docker service update --replicas=0 ${service_id_or_name}

服務可以作為堆疊的一部分進行部署。要刪除整個堆疊:

$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}

答案2

這意味著您的某些容器將 RestartPolicy 設為始終。這意味著容器必須始終處於向上狀態。請檢查這些有問題的容器,特別是檢查 RestartPolicy 的值。

$ docker inspect container-name

--restart當創建帶有始終標誌的容器時,通常會發生這種情況

若要停用容器自動啟動,請使用下列命令:

$ docker update --restart=no container-name

解決此問題的另一種方法是在啟動容器時將 RestartPolicy 設定為除非停止。您可以閱讀完整的文檔碼頭工人更新

答案3

查看 docker 重啟策略,例如--restart always.我猜你的一些容器正在使用它。檢查 docker 的服務啟動腳本。您可以使用docker ps -a --no-trunc查看完整清單。

答案4

鏡像不會自動啟動,容器會自動啟動。

service docker restart容器上停止了或者開始了with --restart alwaysflag 會在重新啟動時自動再次啟動。通過檢查這些docker ps -a

如果您不想啟動某個容器(即使是帶有--restart always標誌的容器),您只需將其刪除,docker rm container或者docker-compose down.

相關內容