Docker build ARG 始终为空字符串

kev*_*sir 12 docker dockerfile

我这里有一个 dockerfile:

FROM golang:1.13-alpine as build
ARG DIR=somevalue
RUN echo $DIR
Run Code Online (Sandbox Code Playgroud)

输出是

Sending build context to Docker daemon  57.37MB
Step 1/3 : FROM golang:1.13-alpine as build
 ---> 2e384b27f926
Step 2/3 : ARG DIR=somevalue
 ---> Running in 3cd3457a795f
Removing intermediate container 3cd3457a795f
 ---> ecfa2f50c4fa
Step 3/3 : RUN echo $DIR
 ---> Running in aab4e31e0e14

Removing intermediate container aab4e31e0e14
 ---> 5351cb77c245
Successfully built 5351cb77c245
Run Code Online (Sandbox Code Playgroud)

当我尝试 DIR 到另一个名称示例 DIR1 时,DIR 始终为空,它也是空的。Docker 版本在这里

 Client:

 Version:           18.09.8
 API version:       1.39
 Go version:        go1.11
 Git commit:        2c0a67b
 Built:             Fri Sep  6 02:50:44 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:

 Engine:
  Version:          18.09.6
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.11
  Git commit:       1d8275b
  Built:            Fri Sep  6 02:51:05 2019
  OS/Arch:          linux/amd64
  Experimental:     false
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试另一台机器时,它是正确的,它会回显一些值。谁能给我一些提示来查找错误机器的问题?谢谢。

Jim*_*ker 15

这显然不是您的示例中的问题,但我在ARG之前声明 an 时遇到此错误FROM。将我需要的移动到ARG下面FROM解决了问题。

  • 我也是。我在这里找到了解释(https://benkyriakou.com/posts/docker-args-empty)。文档的相关部分位于[此处](https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact)。 (4认同)

Abh*_*ngh 0

您可以尝试通过传递--no-cache选项来运行吗,它按我的预期工作

\n\n
\xe2\x9d\xaf\xe2\x9d\xaf\xe2\x9d\xaf docker build . --no-cache\nSending build context to Docker daemon  194.7MB\nStep 1/3 : FROM golang:1.13-alpine as build\n ---> 2e384b27f926\nStep 2/3 : ARG DIR=somevalue\n ---> Running in c53bbb64dda1\nRemoving intermediate container c53bbb64dda1\n ---> b76b21aca433\nStep 3/3 : RUN echo $DIR\n ---> Running in 6c49d289e258\nsomevalue\nRemoving intermediate container 6c49d289e258\n ---> d51e5579f1cb\nSuccessfully built d51e5579f1cb\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果它已经构建了一次相同的图像,它将不会输出任何内容,因为它缓存了图层:

\n\n
\xe2\x9d\xaf\xe2\x9d\xaf\xe2\x9d\xaf docker build .\nSending build context to Docker daemon  194.7MB\nStep 1/3 : FROM golang:1.13-alpine as build\n ---> 2e384b27f926\nStep 2/3 : ARG DIR=somevalue\n ---> Using cache\n ---> b76b21aca433\nStep 3/3 : RUN echo $DIR\n ---> Using cache\n ---> d51e5579f1cb\nSuccessfully built d51e5579f1cb\n
Run Code Online (Sandbox Code Playgroud)\n