当入口点出现时,Docker运行命令忽略Dockerfile CMD的一部分
问题描述:
当我运行我的docker容器时,它似乎只遵守CMD数组(python可执行文件)的第一个元素并忽略尾随参数。当入口点出现时,Docker运行命令忽略Dockerfile CMD的一部分
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
输出:如果我跑--detach
,而不是-it
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.
>>>
同样的情况。
$ 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,它工作正常:
如果我用CMD运行作为压倒一切的搬运工运行参数同样也发生
$ docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer bash
[email protected]:/# /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"
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