本文介绍了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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!