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或者是否有一些内置功能?
答案 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
并在此处传递参数,而不是到您的脚本。
通常,您可以将ENTRYPOINT
和CMD
组合在一起
ENTRYPOINT ["ping"]
CMD ["www.google.com"]
CMD
表示ENTRYPOINT
的默认参数。现在,您可以同时运行
docker run <image_name>
docker run <image_name> yandex.ru
,只有CMD
将被替换。
可以here找到关于ENTRYPOINT
和CMD
如何相互作用的完整参考资料