Docker

無法通過 docker run 命令執行最新的 redhat/ubi8

  • October 16, 2022

我正在嘗試執行 redhat/ubi8。

docker pull redhat/ubi8
docker run redhat/ubi8

docker run命令返回,沒有輸出。

docker container list命令列出容器:

71b0897317aa redhat/ubi8:latest “/bin/bash” 21 分鐘前 退出 (0) 21 分鐘前 Amazing_volhard

嘗試獲取日誌docker logs amazing_volhard沒有輸出。

一些額外的診斷事實:

  • 最奇怪的是,我可以使用 Docker Desktop 成功執行這個鏡像,只需點擊執行。正在執行的容器似乎正在執行,但也會向 log 輸出零行
  • 我還可以通過命令行成功執行其他 linux 映像docker run,例如 cassandra:latest,或者docker run -d -p 80:80 docker/getting-started全部成功寫入日誌

問題

雖然我知道 redhat/ubi8 是一個基礎鏡像,目的是在上面建構我自己的自定義鏡像,但我仍然想了解,為什麼我不能執行它docker run而我可以通過 Docker 桌面 GUI 執行它,我也想了解為什麼成功啟動的容器和未成功啟動的容器的日誌都是空的。

像許多基礎鏡像一樣,redhat/ubi8預設情況下執行一個 shell(/bin/bash在這種情況下,但這並不重要)。

如果你執行bash並且標準輸入被關閉,它會立即退出。如果您執行以下內容,您可以看到相同的行為:

bash < /dev/null

因為您在docker run沒有指定的情況下執行-i,所以這正是這裡發生的事情:

  1. 你跑docker run redhat/ubi8
  2. 圖像redhat/ubi8執行/bin/bash
  3. /bin/bash看到標準輸入已關閉,因此退出

如果您想查看不同的行為,請將-i和添加-t到您的命令行:

docker run -it redhat/ubi8

或者執行 shell 以外的東西:

docker run redhat/ubi8 sleep inf

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