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

时间:2015-07-22 20:26:25

标签: docker

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

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

但我有时发现我想将标志传递给[COMMAND]

例如,我一直在使用this image,其中Dockerfile中指定的[COMMAND]为:

CMD ["/bin/bash", "-c", "/opt/solr/bin/solr -f"]

有没有办法将标记添加到"/opt/solr/bin/solr -f",以便它的格式为"/opt/solr/bin/solr -f [-MY FLAGS]"

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

2 个答案:

答案 0 :(得分:6)

Dockerfile CMD指令是容器启动时运行的命令如果docker run中未指定 no命令命令。

  

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

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

docker run makuk66/docker-solr /bin/bash -c "/opt/solr/bin/solr -f [your flags]"

答案 1 :(得分:2)

有一个特殊的指令ENTRYPOINT可以满足您的需求。与CMD不同,它将在命令末尾添加其他标志。

例如,您可以编写

ENTRYPOINT ["python"]

并运行

docker run <image_name> -c "print(1)"

请注意,这仅在您以exec格式(通过["...", "..."])编写命令时有效,否则ENTRYPOINT将调用shell并在此处传递参数,而不是到您的脚本。

通常,您可以将ENTRYPOINTCMD组合在一起

ENTRYPOINT ["ping"]  
CMD ["www.google.com"]  

CMD表示ENTRYPOINT的默认参数。现在,您可以同时运行

docker run <image_name>
docker run <image_name> yandex.ru

,只有CMD将被替换。

可以here找到关于ENTRYPOINTCMD如何相互作用的完整参考资料