
我想檢查由其他人建立的 docker 映像,並指定了入口點和 cmd,例如:
ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]
我目前正在做:
docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login
有沒有辦法將 CMD 覆蓋為空(這樣我就不必使用“--login”)?
答案1
您只需輸入 via docker run -it --entrypoint=/bin/bash $IMAGE -i
(您將從映像啟動新容器並以互動模式取得 bash shell),然後在該容器中執行入口點命令。
然後,您可以檢查正在運作的容器是否處於應運作的狀態。
編輯:從 Docker 1.3 開始,您可以用來exec
在正在執行的容器中執行進程。像平常一樣啟動容器,然後透過發出以下命令進入它:
docker exec -it $CONTAINER_ID /bin/bash
假設安裝了 bash,您將獲得對正在執行的容器的 shell 存取權。
答案2
看:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults
相關部分:
CMD(預設命令或選項)回想一下 Docker 命令列中的可選命令:
$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
該命令是可選的,因為建立 IMAGE 的人可能已經使用 Dockerfile CMD 提供了預設命令。作為操作員(從映像運行容器的人),您只需指定新的 COMMAND 即可覆寫該 CMD。
如果影像也指定了 ENTRYPOINT,則 CMD 或 COMMAND 將作為參數附加到 ENTRYPOINT。
所以要做你想做的事你需要僅有的指定一個 cmd,並使用 覆蓋/bin/bash
。雖然不是很“空”,但它完成了 99% 的工作。
答案3
對於任何來這裡覆蓋入口點和命令來傳遞其他命令的人,例如運行 bash 而不是入口點腳本,然後運行一些帶有參數的其他命令(從其他答案中我不清楚):
docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'
-c 'npm link ...'
是參數,/bin/sh
因此您可以在此處傳遞您想要在容器中執行的任何命令。/bin/sh
適用於高山影像,/bin/bash
很可能適用於其他影像。