加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

出现ENTRYPOINT时,Docker运行命令忽略Dockerfile CMD的一部分

发布时间:2020-12-16 03:24:11 所属栏目:安全 来源:网络整理
导读:当我运行docker容器时,它似乎仅遵循CMD数组(python可执行文件)的第一个元素,而忽略了尾随参数. Dockerfile: FROM ubuntu:14.04ENTRYPOINT ["/bin/bash","-c"]CMD ["/virtualenv/bin/python","/mycode/myscript.py","--param1"] 运行命令: $docker run --rm

当我运行docker容器时,它似乎仅遵循CMD数组(python可执行文件)的第一个元素,而忽略了尾随参数.

Dockerfile:

FROM ubuntu:14.04

ENTRYPOINT ["/bin/bash","-c"]
CMD ["/virtualenv/bin/python","/mycode/myscript.py","--param1"]

运行命令:

$docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer

输出:

Python 3.4.3 (default,Oct 14 2015,20:28:29)
[GCC 4.8.4] on linux
Type "help","copyright","credits" or "license" for more information.
>>>

如果我运行–detach而不是-it,也会发生同样的情况.

如果将CMD作为覆盖的docker run参数运行,也会发生同样的情况:

$docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer /virtualenv/bin/python /mycode/myscript.py --param1
Python 3.4.3 (default,"credits" or "license" for more information.
>>>

如果我使用bash运行容器并从bash提示符运行CMD,则可以正常工作:

$docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer bash
root@d6a990e81c22:/# /virtualenv/bin/python /mycode/myscript.py --param1
Hello world!
最佳答案
你可能想要

CMD ["/virtualenv/bin/python /mycode/myscript.py --param1"]

代替

CMD ["/virtualenv/bin/python","--param1"]

当Dockerfile中同时存在CMD和ENTRYPOINT时,CMD用作ENTRYPOINT的默认参数.所以你基本上在做

bash -c "/virtualenv/bin/python" "/mycode/myscript.py" "--param1"

当你想要的时候

bash -c "/virtualenv/bin/python /mycode/myscript.py --param1"

https://docs.docker.com/engine/reference/builder/#cmd
https://docs.docker.com/engine/reference/builder/#entrypoint
https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读