本文介绍了RUN 命令中的 ARG 替换不适用于 Dockerfile的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 Dockerfile 中,我有以下内容:

In my Dockerfile I have the following:

ARG a-version
RUN wget -q -O /tmp/alle.tar.gz http://someserver/server/$a-version/a-server-$a-version.tar.gz &&
    mkdir /opt/apps/$a-version

但是,当使用以下方法构建它时:

However when building this with:

--build-arg http_proxy=http://myproxy","--build-arg a-version=a","--build-arg b-version=b"

Step 10/15 : RUN wget... 在路径中显示 $a-version 而不是替换值,构建失败.

Step 10/15 : RUN wget... is shown with $a-version in the path instead of the substituted value and the build fails.

我已按照此处显示的说明进行操作,但一定缺少其他内容.

I have followed the instructions shown here but must be missing something else.

我的问题是,什么可能导致这个问题,我该如何解决是吗?

推荐答案

不要在变量名中使用-.

Docker build 将始终向您显示 Dockerfile 中记录的行,尽管变量值.

Docker build will always show you the line as is written down in the Dockerfile, despite the variable value.

所以使用这个变量名a_version:

ARG a_version

看这个例子:

Dockerfile:

Dockerfile:

FROM alpine

ARG a_version
RUN echo $a_version

构建:

$ docker build . --build-arg a_version=1234
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM alpine
 ---> a41a7446062d
Step 2/3 : ARG a_version
 ---> Running in c55e98cab494
 ---> 53dedab7de75
Removing intermediate container c55e98cab494
Step 3/3 : RUN echo $a_version                <<< note this <<
 ---> Running in 56b8aeddf77b
1234                                          <<<< and this <<
 ---> 89badadc1ccf
Removing intermediate container 56b8aeddf77b
Successfully built 89badadc1ccf

这篇关于RUN 命令中的 ARG 替换不适用于 Dockerfile的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-24 22:25