运行Docker镜像时如何覆盖CMD?

我想检查一个由别人创build的docker镜像,同时指定一个入口点和cmd,例如:

ENTRYPOINT ["/usr/sbin/apache2ctl"] CMD ["-D", "FOREGROUND"] 

我现在做:

 docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login 

有没有办法覆盖CMD为空(所以我不必使用“ – login”)?

你可以通过docker run -it --entrypoint=/bin/bash $IMAGE -i进入docker run -it --entrypoint=/bin/bash $IMAGE -i (你将启动容器并以交互模式获得bash shell),然后在该容器中运行entrypoint命令。

然后,您可以检查正在运行的状态下正在运行的容器。

编辑:由于Docker 1.3,您可以使用exec来运行正在运行的容器中的进程。 按照通常的方式启动容器,然后发出以下命令进入:

docker exec -it $CONTAINER_ID /bin/bash

假设安装了bash,您将获得对正在运行的容器的shell访问权限。

请参阅: https : //docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

相关部分:

CMD(默认命令或选项)调用Docker命令行中的可选命令:

 $ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] 

此命令是可选的,因为创buildIMAGE的人可能已经使用Dockerfile CMD提供了默认的COMMAND。 作为操作员(从图像运行容器的人),只需指定一个新的命令即可覆盖该CMD。

如果图像也指定了一个入口点,那么CMD或者COMMAND作为参数附加到入口点。

所以要做你想做的事,你需要指定一个cmd,然后用/bin/bash覆盖。 不是很“空洞”,但是99%完成了这项工作。

对于任何人来这里覆盖入口点和命令传递其他命令,例如运行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最有可能用于其他图像。