Dockerfile ARG变量

时间:2018-05-11 18:32:19

标签: docker dockerfile

感谢您提供任何帮助!

我是Docker的新手(使用17.06.2-ee-10),目前我在Windows Server 2016上使用它,运行windowsservercore映像。我的问题很简单。

在我的dockerfile中我有

ARG destpath=C:\path\
ARG javafile=java.exe

我想做的是制作另一个变量

ARG javapath=$destpath$javafile

这是我遇到问题的地方。

如果我运行echo%javapath%它会返回$ destpath $ javafile(有时甚至不会)

它永远不会将增加的变量放在一起。我尝试了一些不同的东西,比如制作(ARG javapath =%destpath %% javafile%。)或试图逃避路径上的“\”字符。但没有任何作用。

我是初学者,不确定我是否需要在我的问题中更详细,或者dockerfile只是不允许我尝试做什么。如果您需要更多说明,请告诉我。

由于

亚瑟

1 个答案:

答案 0 :(得分:1)

在你的变量周围放置大括号,而不仅仅是在可能含糊不清的情况下,可以认为是良好的编程习惯。所以,试试花括号。这对我有用。

更新的答案:

抱歉,我应该测试您提供的值。是的,为了使它工作,我必须用C:\path\用单引号括起来:

FROM centos:latest

ARG destpath='C:\path\'
ARG javafile=java.exe
ARG javapath=${destpath}${javafile}

RUN echo $javapath

结果:

$ docker build -t temp .
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM centos:latest
 ---> e934aafc2206
Step 2/5 : ARG destpath='C:\path\'
 ---> Running in 61f1aa0ea477
Removing intermediate container 61f1aa0ea477
 ---> f49332bb07f9
Step 3/5 : ARG javafile=java.exe
 ---> Running in 7f965bea7edf
Removing intermediate container 7f965bea7edf
 ---> b1d66e9b07ff
Step 4/5 : ARG javapath=${destpath}${javafile}
 ---> Running in 9cfb4e2274f3
Removing intermediate container 9cfb4e2274f3
 ---> 65dc408e384b
Step 5/5 : RUN echo $javapath
 ---> Running in 7906c930caef
C:\path\java.exe ##################################### there you go
Removing intermediate container 7906c930caef
 ---> 887ef91def32
Successfully built 887ef91def32
Successfully tagged temp:latest

OLD ANSWER:

FROM centos:latest

ARG destpath=hello
ARG javafile=world
ARG javapath=${destpath}${javafile}

RUN echo $javapath

我的结果如下:

$ docker build -t temp .
Step 1/5 : FROM centos:latest
 ---> e934aafc2206
Step 2/5 : ARG destpath=hello
 ---> Running in 30f047122373
Removing intermediate container 30f047122373
 ---> 582d3a801fd0
Step 3/5 : ARG javafile=world
 ---> Running in 78817656b729
Removing intermediate container 78817656b729
 ---> a3afa410e42e
Step 4/5 : ARG javapath=${destpath}${javafile}
 ---> Running in 8baf8c862572
Removing intermediate container 8baf8c862572
 ---> 1a9c012e4d57
Step 5/5 : RUN echo $javapath
 ---> Running in 48ee08e6452d
helloworld ############################################## there it is
Removing intermediate container 48ee08e6452d
 ---> 9d72ba2aab67
Successfully built 9d72ba2aab67
Successfully tagged temp:latest

P.S。如果这不起作用,那就是窗户的错误。