感谢您提供任何帮助!
我是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只是不允许我尝试做什么。如果您需要更多说明,请告诉我。
由于
亚瑟
答案 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。如果这不起作用,那就是窗户的错误。