你可以将标志传递给docker运行的命令吗?

m0m*_*eni 7 docker

run命令的文档遵循以下语法:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
Run Code Online (Sandbox Code Playgroud)

但是我有时发现我想要传递旗帜[COMMAND].

例如,我一直在处理这个图像,其中Dockerfile中[COMMAND]指定的是:

CMD ["/bin/bash", "-c", "/opt/solr/bin/solr -f"]
Run Code Online (Sandbox Code Playgroud)

有没有办法在标志上加以标记,"/opt/solr/bin/solr -f"以便它在表格中"/opt/solr/bin/solr -f [-MY FLAGS]"

我是否需要编辑DockerFile或者是否有一些内置功能?

小智 7

有一个特殊指令ENTRYPOINT可以满足您的需求。不像CMD它会在你的命令末尾添加额外的标志。

例如,你可以写

ENTRYPOINT ["python"]
Run Code Online (Sandbox Code Playgroud)

并运行它

docker run <image_name> -c "print(1)"
Run Code Online (Sandbox Code Playgroud)

请注意,这仅在您以exec表单(via ["...", "..."])编写命令时才有效,否则ENTRYPOINTshell在那里调用并传递您的参数,而不是您的脚本。

更一般地说,你可以结合ENTRYPOINTCMD

ENTRYPOINT ["ping"]  
CMD ["www.google.com"]  
Run Code Online (Sandbox Code Playgroud)

哪里CMD表示您的ENTRYPOINT. 现在你可以同时运行

docker run <image_name>
docker run <image_name> yandex.ru
Run Code Online (Sandbox Code Playgroud)

并且只会CMD被替换。

可以在此处找到有关如何ENTRYPOINTCMD交互的完整参考


Tho*_*eil 6

CMD一个的指令Dockerfile是当容器开始,将要运行的命令,如果在没有指定命令docker run的命令.

CMD的主要目的是为执行容器提供默认值.


在您的情况下,只需使用以下docker run命令覆盖Dockerfile中指定的默认命令:

docker run makuk66/docker-solr /bin/bash -c "/opt/solr/bin/solr -f [your flags]"
Run Code Online (Sandbox Code Playgroud)