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 />
#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
评论
那不会执行“ / 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