gpt4 book ai didi

docker - 当被docker run覆盖时,为什么docker仍在运行CMD?

转载 作者:行者123 更新时间:2023-12-02 19:32:56 26 4
gpt4 key购买 nike

我有一个带有以下CMD作为最后一行的Dockerfile

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是否正常?我认为这应该是 CMDENTRYPOINT之间的区别之一,您可以轻松地覆盖 CMD而无需使用 --entrypoint标志。

如果很重要,请使用docker版本 17.03.0-ce

最佳答案

正在运行的镜像在某处定义了ENTRYPOINT。如果FROM中没有一个,则可能是在图像中正在构建Dockerfile

定义了ENTRYPOINTCMD后,Docker会将CMD传递给ENTRYPOINT作为参数。从那里,由ENTRYPOINT可执行文件决定要做什么。

这些参数可以完全忽略,可以在入口点认为合适的情况下进行修改,也可以将完整的命令传递给运行。该行为是特定于图像的。

关于docker - 当被docker run覆盖时,为什么docker仍在运行CMD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com