1

我在将参数值传递给 dockerfile 时遇到了一些麻烦。

在里面运行 dockerWindows Server 2016

我的 docker 版本信息是

PS C:\Users\Administrator\Desktop> docker version
Client: Docker Engine - Enterprise
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9e27c76fe0
 Built:             10/17/2019 23:42:50
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Enterprise
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.12.10
  Git commit:       9e27c76fe0
  Built:            10/17/2019 23:41:23
  OS/Arch:          windows/amd64
  Experimental:     false

和 powershell 打开为administrator.

我的参考是这个

但这对我不起作用。

所以这是我的dockerfile。

FROM microsoft/iis

ARG a_version
RUN echo $a_version

我也尝试了许多不同类型的回声值,例如

RUN echo "$a_version"
RUN echo ${a_version}
RUN echo "${a_version}"

这是我的执行命令。

docker build . --build-arg a_version=1234

我的预期结果是打印1234

但实际结果是

PS C:\Users\Administrator\Desktop> docker build . --build-arg a_version=1234
Sending build context to Docker daemon  14.04MB
Step 1/3 : FROM microsoft/iis
 ---> 595015675977
Step 2/3 : ARG a_version
 ---> Running in 91698d9e71da
Removing intermediate container 91698d9e71da
 ---> 2bad94a2ce74
Step 3/3 : RUN echo $a_version
 ---> Running in 3fe25ecb813c
$a_version

为什么会发生?如何修复它?

4

2 回答 2

1

在 Windows 命令提示符中,语法是 echo %a_version%,因为您的基本映像基于窗口。

我如何从命令提示符显示环境变量的内容

所以你可以把它改成

FROM microsoft/iis
ARG a_version
RUN echo %a_version%

env 在窗口 dockerfile

于 2019-11-05T07:56:28.917 回答
0

我必须做一些类似的事情,这是一段对我有用的代码。

ARG PORT_SITE
ENV PORT_SITE ${PORT_SITE}

然后我在入口点中引用它如下

$env:PORT_SITE

这就是我这样做的方式,但我想你可以省略 env 变量并使用 arg 值来引用

${PORT_SITE}
于 2021-03-17T03:57:08.797 回答