我想检查一个由别人创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
最有可能用于其他图像。