覆盖父 Docker 个参数
Override parent Docker arguments
让父 Docker some_img 将参数 X
设置为 '0'
。
如何覆盖参数值并让父 [=34=] 使用其他 X?
我试过了
ARG X='1'
FROM some_img:latest
...do stuff...
但显然 some_img 仍然使用 X='0'
因为 ARG='0'
在 some_img Docker 文件中指定。 ENV 将优先于 ARG,但这在 FROM 之前是不允许的。
请注意,如果我只是构建 some_img,我可以使用 docker build
中的 --build-arg
选项覆盖 Docker 文件中的 ARG。
有什么方法可以覆盖父 Docker 中的参数吗?
不,没有办法做到这一点。
docker build
的结果是一个不透明的、不可变的图像。下游 Dockerfile 的 FROM
行不会重建图像,它只是按原样导入不透明图像。构建后无法更改镜像中的内容或其构建选项,也无法在以后的 Dockerfile 中重新构建它。
如果您控制两个图像,则您尝试更改的内容可能根本不应该是构建时 ARG
。像上游包版本号这样的东西可能很好 ARG
s(Java 8 vs. Java 11 版本的东西可能“不同”到足以值得两个构建但仍然非常相似整体;从某些库的版本 3.4.1 更新到 3.4.2 可能只涉及更改版本号而不是任何逻辑)。以后需要控制行为的东西(数字用户 ID、数据库位置等)应该以其他方式配置,而不是内置到图像中。
让父 Docker some_img 将参数 X
设置为 '0'
。
如何覆盖参数值并让父 [=34=] 使用其他 X?
我试过了
ARG X='1'
FROM some_img:latest
...do stuff...
但显然 some_img 仍然使用 X='0'
因为 ARG='0'
在 some_img Docker 文件中指定。 ENV 将优先于 ARG,但这在 FROM 之前是不允许的。
请注意,如果我只是构建 some_img,我可以使用 docker build
中的 --build-arg
选项覆盖 Docker 文件中的 ARG。
有什么方法可以覆盖父 Docker 中的参数吗?
不,没有办法做到这一点。
docker build
的结果是一个不透明的、不可变的图像。下游 Dockerfile 的 FROM
行不会重建图像,它只是按原样导入不透明图像。构建后无法更改镜像中的内容或其构建选项,也无法在以后的 Dockerfile 中重新构建它。
如果您控制两个图像,则您尝试更改的内容可能根本不应该是构建时 ARG
。像上游包版本号这样的东西可能很好 ARG
s(Java 8 vs. Java 11 版本的东西可能“不同”到足以值得两个构建但仍然非常相似整体;从某些库的版本 3.4.1 更新到 3.4.2 可能只涉及更改版本号而不是任何逻辑)。以后需要控制行为的东西(数字用户 ID、数据库位置等)应该以其他方式配置,而不是内置到图像中。