我想检查由其他人创建的,同时指定了入口点和cmd的docker映像,例如:

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


我目前正在做:

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


是否可以重写CMD为空(因此我不必使用“ --login”)?

#1 楼

您可以仅通过docker run -it --entrypoint=/bin/bash $IMAGE -i输入(您将从图像启动一个新容器,并以交互方式获取bash shell),然后在该容器中运行entrypoint命令。

然后您可以检查运行情况容器应处于运行状态。

编辑:自Docker 1.3起,您可以使用exec在正在运行的容器中运行进程。像平常一样启动容器,然后发出以下命令输入它:

docker exec -it $CONTAINER_ID /bin/bash

假设已安装bash,则将为您提供对运行中的容器的shell访问权限。 br />

评论


那不会执行“ / usr / sbin / apache2ctl / bin / bash”吗? (因为您的示例未覆盖入口点,它将使用Dockerfile中定义的入口点-还是我缺少了什么?)

–经线
2014年5月12日17:56

对于较旧/较新的Docker版本,这是否有所不同?它肯定为我运行了入口点:gist.github.com/warpr/26a5cc471dce7fcf9021。这在Ubuntu 13.10上使用docker 0.10.0。

–经线
2014年5月12日21:56



我知道传递--entrypoint会覆盖入口点。但是,当我使用--entrypoint时,如何覆盖CMD为空? (对于bash,我可以使用-i或--login之类的东西,但并非我可能要使用的所有入口点都具有等效的“虚拟”参数)。

–经线
14年5月13日在13:24

至少在Docker v1.11.1中,似乎覆盖--entrypoint还会阻止将CMD正常附加到入口点。这似乎仅在未覆盖入口点时发生。

–茉莉·黑格曼(Jasmine Hegman)
17年8月23日在20:59

为什么$ IMAGE之后有-i?

–艾尔·莱文(Eyal Levin)
18-10-21在12:57

#2 楼

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

相关部分:

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

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


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

如果图像还指定了ENTRYPOINT,则CMD或COMMAND将作为参数附加到ENTRYPOINT。

因此,您只需指定一个cmd并使用/bin/bash覆盖即可完成所需的操作。不是很“空”,但可以完成99%的工作。

评论


糟糕,我忽略了一个细节。除了缩短--login到-l之外,我猜您的解决方案已经足够了。

–西蒙·图姆
2014年6月12日8:02

这是我今天看到的一件有趣的事情:该命令没有被覆盖,它是附加的。这是来自容器内部的PS。请注意,我添加的命令是echo“设置数据库”,内置命令是/ usr / bin / geth。另外,我将入口点设置为“”。 1个SSL 0:00 / usr / bin / geth回显设置数据库

– Paul S
16年2月20日在9:08

码头工人参考链接不再有效-找不到明显的替代品。

–克里斯·金普顿(Chris Kimpton)
17年4月26日在11:56

我只是修复了它,但我也发现它很难找到;(

–西蒙·图姆
17年4月27日在8:45

#3 楼

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

评论


只是一个加壳命令应基于json writen,所以不要使用单引号'...'引用,而应使用双引号“ ...”。

–吉米·奥本约·阿伯(Jimmy Obonyo Abor)
17年9月11日在16:44

或者只是根据需要传递尽可能多的--entrypoint参数

–尼克·罗兹(Nick Roz)
19年7月17日在16:11

这似乎不起作用:“ exec:\”-c \“:在$ PATH中找不到可执行文件”:未知。

–理查德
19-09-19在17:13

检查容器中的路径,也许它确实不存在。大多数图像都有/ bin / sh,但您的情况可能并非如此。

– infro
19-09-20在12:07

我认为这是最好,最完整的答案,尽管正如@JimmyObonyoAbor指出的那样,应使用双引号(“)进行更正。

– NYCeyes
20年4月13日在16:47