Docker

檢查容器/服務是否使用 docker-compose 執行

  • November 16, 2021

我正在使用docker-compose.

一些命令像up -d service_nameorstart service_name正在立即返回,如果您不希望容器執行依賴於 shell 的狀態,這將非常有用,就像它們對正常up service_name. 一個案例是從某種持續集成/傳遞伺服器執行它。

但是這種執行/啟動服務的方式並沒有提供任何關於服務實際狀態的回饋。

命令Docker Compose CLI 參考up確實提到了相關選項,但是,對於 version 1.7.1,它與 互斥-d

--abort-on-container-exit  Stops all containers if any container was stopped.
                           *Incompatible with -d.*

我可以以某種方式手動檢查容器是否確實在工作並且沒有因為某些錯誤而停止?

  • docker-compose ps -q <service_name>將顯示容器 ID,無論它是否正在執行,只要它是創建的。
  • docker ps僅顯示那些實際執行的。

讓我們結合這兩個命令:

if [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q <service_name>)` ]; then
 echo "No, it's not running."
else
 echo "Yes, it's running."
fi

docker ps預設顯示短版本的 ID,所以我們需要指定--no-trunc標誌。

更新:如果服務沒有執行,它會拋出“grep usage”警告。感謝@Dzhuneyt,這是更新的答案。

if [ -z `docker-compose ps -q <service_name>` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q <service_name>)` ]; then
 echo "No, it's not running."
else
 echo "Yes, it's running."
fi

引用自:https://serverfault.com/questions/789601