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