如何将参数连接到现有的 Dockerfile CMD?

How to concat arguments to an existing Dockerfile CMD?

假设我们有一个带有一些 CMD 的 Dockerfile,我们从中生成并镜像。现在假设我们写了一个 docker-compose 并且其中一个服务是从那个图像构建的。

我想要做的是 运行 相同的命令,但连接我自己的新参数。

举个例子,假设原来的CMD是

java -jar app.jar --argumentA=valA

我希望命令是

java -jar app.jar --argumentA=valA --argumentB=valB

可能吗?

我不完全确定这是否是您想要完成的,但是...

Dockerfile 公开了 ENTRYPOINTCMD 以便能够执行命令。这些也可以结合使用,但在这种情况下 ENTRYPOINT 将是我们要执行的命令,而 CMD 将代表 ENTRYPOINT 的一些默认参数(docs).

例如:

FROM openjdk:11

COPY . /target/app.jar

ENTRYPOINT ["java", "-jar", "app.jar", "--argumentA=valA"]

CMD ["--argumentB=valB"]

--argumentB=valB 将附加到 java -jar app.jar --argumentA=valA,如果我们 运行 像这样的图像:

docker build -t app .
docker run app # # the command executed will be java -jar app.jar --argumentA=valA --argumentB=valB

但是如果我们在 运行 docker 图像时提供其他参数,CMD 部分将被覆盖:

docker build -t app .
docker run app --argumentA=valC # the command executed will be java -jar app.jar --argumentA=valA --argumentB=valC

此外,如果我们不需要将某些默认值附加到 ENTRYPOINT

,我们可以提交 CMD 并仅获得 ENTRYPOINT