我有一个Dockerfile,其中CMD
为最后一行
CMD ["/usr/local/myapp/bin/startup.sh", "docker"]
在启动期间针对docker镜像执行的脚本的一部分如下
# find directory of cacerts file in DOCKER_JAVA_HOME of container
DOCKER_CACERTS_DIR=$(dirname "$(docker run "$DOCKER_IMAGE_ID" find "$DOCKER_JAVA_HOME" -name cacerts)")
但是,这仍然会从我的Dockerfile执行CMD
行。
我发现我可以通过更改脚本中的行来改变这种行为。
# find directory of cacerts file in DOCKER_JAVA_HOME of container
DOCKER_CACERTS_DIR=$(dirname "$(docker run --entrypoint find "$DOCKER_IMAGE_ID" "$DOCKER_JAVA_HOME" -name cacerts)")
但是,我认为这不是必要的。在CMD
命令中重写时,docker执行docker run
是否正常?我认为这应该是使用CMD
和ENTRYPOINT
之间的差异之一,您可以在不使用CMD
标记的情况下轻松覆盖--entrypoint
。
如果重要,则使用泊坞窗版本17.03.0-ce
答案 0 :(得分:1)
正在运行的图像在某处定义了ENTRYPOINT
。如果您FROM
中没有Dockerfile
,则可能正在构建ENTRYPOINT
的图片中。
定义CMD
和CMD
后,Docker会将ENTRYPOINT
作为参数传递给ENTRYPOINT
。从那里开始,由@if (ViewBag.TicketId > 0)
{
Html.Action("GetName", "Ticket", new { Area = "Ticket" });
}
可执行文件决定要做什么。
参数可以完全忽略,在入口点看起来适合时进行修改,或者可以传递完整的命令来运行。该行为是特定于图像的。