簡體   English   中英

當ENTRYPOINT存在時,Docker運行命令忽略Dockerfile CMD的一部分

[英]Docker run command ignoring part of Dockerfile CMD when ENTRYPOINT present

當我運行我的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, 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"]

ENTRYPOINT中存在CMDENTRYPOINT ,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/建設者/#明白,怎么-CMD-和入口點,相互作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM