1

我有一个 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)")

但是,这仍然会执行CMD我的 Dockerfile 中的行。

我发现我可以通过如下更改脚本中的行来改变这种行为。

# 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)")

但是,我认为这没有必要。docker在命令中执行CMDwhen覆盖是否正常docker runCMD我认为这应该是使用and之间的区别之一,您可以在不使用标志的情况下ENTRYPOINT轻松覆盖。CMD--entrypoint

如果它很重要,这是使用 docker 版本17.03.0-ce

4

1 回答 1

1

正在运行的图像在ENTRYPOINT某处已定义。FROM如果您的Dockerfile.

ENTRYPOINTCMD被定义时,Docker 会将 传递CMDENTRYPOINTas 参数。从那里,由ENTRYPOINT可执行文件决定做什么。

参数可以被完全忽略,在入口点认为合适时进行修改,或者它可以传递完整的命令以运行。这种行为是特定于图像的。

于 2018-03-19T22:35:46.583 回答