Docker build-arg和copy

A.J*_*Jac 11 docker

试图复制文件夹内容,它适用于我硬编码路径,如:

COPY ./my-folder /path/to/location
Run Code Online (Sandbox Code Playgroud)

但是需要能够改变这条路径,所以我尝试使用这样的构建参数:

COPY ${folderVariable} /path/to/location
Run Code Online (Sandbox Code Playgroud)

然后用

--build-arg folderVariable=./my-folder
Run Code Online (Sandbox Code Playgroud)

但是当我只想要"my-folder"的内容时,它会将所有内容复制到与"my-folder"相同的文件夹中

shi*_*zhz 24

在使用之前,您需要使用ARGin 来定义它Dockerfile:

FROM alpine:3.3

ARG folderVariable=./my-folder # Optional default value to be `./my-folder`

COPY ${folderVariable} /opt/my-folder
Run Code Online (Sandbox Code Playgroud)

建立它像:

docker build --build-arg folderVariable=./folder-copy -t test .
Run Code Online (Sandbox Code Playgroud)

更多细节请参考:https://github.com/docker/docker/blob/master/docs/reference/builder.md#arg

  • 这可能以前有效,但对于当前的 docker 版本(19.03.4),构建参数似乎没有按预期扩展。 (17认同)
  • @Emil,你有多阶段构建吗?[`ARG` 的范围仅限于构建阶段。](https://docs.docker.com/engine/reference/builder/#scope) (6认同)
  • 请注意,“ARG”具有范围(https://docs.docker.com/engine/reference/builder/#scope)。我已经挣扎了几个小时了:P (6认同)
  • 天哪@Manolo 希望我在 4 小时前就找到了你的评论......在我看来,范围界定的事情不是很直观 (5认同)
  • 在单阶段构建(19.03.5 或 18 中)中,似乎不会在 COPY 语句的 --from 参数中展开。 (2认同)
  • 我遇到了同样的问题,我更新了 docker,将 ARG 移到 FORM 之后,然后我还看到我的 ARG 有前导空格,并且它困扰了复制命令。 (2认同)
  • @Manolo 非常感谢你!我没有意识到我在“FROM”中拉入的映像_也_进行了多阶段构建并更改了范围。您的评论和链接帮助我解决了这个问题! (2认同)

Dze*_*nly 17

扩展仍然不适用于这种COPY --from=$var ...情况。但是您可以创建中间图像作为别名,如下所示:

ARG docsBranch=4.5
ARG docsFullPath=registry.myCompany.pro/group/project-docs/docs:$docsBranch

# Lifehack
FROM $docsFullPath as docs

FROM node:10.21.0-buster-slim
WORKDIR /app

# Now we can use docs instead of $docsFullPath
COPY --from=docs /app/html/en ./documentation/en
Run Code Online (Sandbox Code Playgroud)

  • 2022年仍然是一个问题。这应该是正确的答案。 (8认同)