在 Dockerfile 中覆盖 FROM 图像的 ENV
Override FROM image's ENV in Dockerfile
来自下图:https://registry.hub.docker.com/u/cloudesire/activemq/dockerfile/
如果我想覆盖我的子 docker 文件中的 ACTIVEMQ_VERSION 环境变量,我假设我可以执行如下操作:
FROM cloudesire/activemq:latest
MAINTAINER abc <abc@xyz.co.uk>
ENV ACTIVEMQ_VERSION 5.9.1
ADD ./src/main/resources/* /opt/activemq/conf/
但这似乎不起作用。诚然,我是 Docker 的新手,显然误解了一些东西。请有人解释为什么这不起作用,how/if我可以用另一种方式实现它吗?
那不行。 ACTIVEMQ_VERSION
已被 cloudesire/activemq:latest
图像构建用于填充其图像层。所有基于5.11.1
版本的ActiveMQ安装文件都已经解压到对应的目录中。
在您的 Dockerfile
中,您只能在已经构建的内容之上构建并添加您的文件。您自己的 Dockerfile
构建将 不会重新 运行 他们 Dockerfile
.
中描述的构建说明
如果您需要拥有自己的基于 5.9.1 版的 cloudesire/activemq
映像,您需要克隆他们的 Dockerfile
,调整那里的版本并在本地构建它。所以你可以将你的其他 Dockerfile
作为基础。
来自下图:https://registry.hub.docker.com/u/cloudesire/activemq/dockerfile/
如果我想覆盖我的子 docker 文件中的 ACTIVEMQ_VERSION 环境变量,我假设我可以执行如下操作:
FROM cloudesire/activemq:latest
MAINTAINER abc <abc@xyz.co.uk>
ENV ACTIVEMQ_VERSION 5.9.1
ADD ./src/main/resources/* /opt/activemq/conf/
但这似乎不起作用。诚然,我是 Docker 的新手,显然误解了一些东西。请有人解释为什么这不起作用,how/if我可以用另一种方式实现它吗?
那不行。 ACTIVEMQ_VERSION
已被 cloudesire/activemq:latest
图像构建用于填充其图像层。所有基于5.11.1
版本的ActiveMQ安装文件都已经解压到对应的目录中。
在您的 Dockerfile
中,您只能在已经构建的内容之上构建并添加您的文件。您自己的 Dockerfile
构建将 不会重新 运行 他们 Dockerfile
.
如果您需要拥有自己的基于 5.9.1 版的 cloudesire/activemq
映像,您需要克隆他们的 Dockerfile
,调整那里的版本并在本地构建它。所以你可以将你的其他 Dockerfile
作为基础。