gpt4 book ai didi

docker - Dockerfile ARG变量

转载 作者:行者123 更新时间:2023-12-02 19:32:05 25 4
gpt4 key购买 nike

感谢您提供的任何帮助!

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

在我的dockerfile中

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

我想要做的是使另一个变量
ARG javapath=$destpath$javafile

这是我遇到问题的地方。

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

它永远不会将添加的变量放在一起。我尝试了几种不同的方法,例如制作(ARG javapath =%destpath %% javafile%。)或尝试在路径上转义“\”字符。但是没有任何效果。

我是一个初学者,不确定是否需要详细说明问题,还是dockerfile不允许我尝试做的事情。如果您需要更多说明,请告诉我。

谢谢

亚瑟

最佳答案

在变量周围加上花括号,而不是仅在可能存在歧义的情况下,可以认为是良好的编程习惯。因此,尝试使用花括号。这对我有用。

更新了答案:

抱歉,我应该已经测试了您提供的值。是的,要使其工作,我必须将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

旧答案:
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

附言如果这不起作用,则是Windows的错误。

关于docker - Dockerfile ARG变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com