在Dockerfile中传递标签的环境变量
我需要在Dockerfile中传递一个环境变量作为标签,我的Dockerfile如下所示:在Dockerfile中传递标签的环境变量,docker,dockerfile,devops,Docker,Dockerfile,Devops,我需要在Dockerfile中传递一个环境变量作为标签,我的Dockerfile如下所示: FROM nginx LABEL maintainer="blabla" ENV GROUP="default" #Checking if Label values can be set from ENV Variables LABEL group="${GROUP}" 下面的命令传递生成并运行docker file env变量: docke
FROM nginx
LABEL maintainer="blabla"
ENV GROUP="default"
#Checking if Label values can be set from ENV Variables
LABEL group="${GROUP}"
下面的命令传递生成并运行docker file env变量:
docker build -t nginx:test_label .
但在检查容器时,它将标签值设置为default
,而不是mygroup
我做错了什么?
LABEL
设置了图像级元数据,因此从该图像创建的所有容器的元数据都是相同的
如果要覆盖容器的标签,必须使用特殊的--label
键指定:
docker run --label GROUP=mygroup nginx:test_label
当前,您正在运行期间将环境变量传递给容器。Dockerfile
在构建阶段处理。如果要在图像中替换此变量,必须在生成时传递它:
docker build --build-arg GROUP=mygroup -t nginx:test_label .
docker映像构建和docker运行是两个不同的步骤。这里的问题是,您不能回到过去,使用应该在未来步骤中提供的值来构建映像。您正在将图像指示到
标签组=“${group}”
,这在生成时确实等于默认值
稍后,当您运行容器并注入环境变量时,您的操作是正确的,但是在运行时没有执行指令告诉容器对该环境变量执行任何操作。但是我想在组标签运行时中添加值,而不是在生成时添加值。但是标签是图像级元数据,不是容器级别。您打算如何使用它?谢谢您的快速回复@Sergei。我计划在普罗米修斯使用这个标签值作为过滤器。就像不同的环境会有不同的标签值一样,我可以在不涉及开发人员的情况下放置过滤器。希望这是有意义的。我明白了,我已经更新了关于如何在容器上设置标签的答案。
docker build --build-arg GROUP=mygroup -t nginx:test_label .