当入口点存在时,Docker run命令忽略Dockerfile CMD的一部分

当入口点存在时,Docker run命令忽略Dockerfile CMD的一部分,docker,dockerfile,Docker,Dockerfile,当我运行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 my

当我运行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运行参数运行,也会发生同样的情况:

$ docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer /virtualenv/bin/python /mycode/myscript.py --param1
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.
>>>
如果我使用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", "/mycode/myscript.py", "--param1"]
当Dockerfile中同时存在
CMD
ENTRYPOINT
时,CMD将作为ENTRYPOINT的默认参数。你基本上在做什么

bash -c "/virtualenv/bin/python" "/mycode/myscript.py" "--param1"
你想什么时候

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