1

环境: Windows 10 ,Docker Desktop (Docker Engine v20.10.6)

当 Docker 映像COPYADD第一个参数是以../../. 错误消息显示任何类似的路径../../a/b/c都被替换为/a/b/c,因此无法在主机上找到。

请帮助我找到解决问题的方法。在多篇文章和论坛中,我看到 Docker 可以正确处理相对路径,但在这种情况下无法找出问题所在。

项目文件夹结构

project_root
  first
    container
       Dockerfile
  second
    target
       artifact.file

Dockerfile

FROM whatever

RUN addgroup -S apprunner && adduser -S apprunner -G apprunner

COPY ../../second/target/artifact.file /home/apprunner/app.file

USER apprunner:apprunner
WORKDIR /home/apprunner
EXPOSE 8080

ENTRYPOINT blabla

从 project_root 执行命令

cd first/container
docker build -q -t my_image_name .

得到这个错误

...

#7 [4/5] COPY ../../second/target/artifact.file /home/apprunner/app.file
#7 sha256:fefde24bc79e3e0b7a3ba0bf6754187537780b9c30fa81537cb5aea93ef9331c
#7 ERROR: "/second/target/artifact.file" not found: not found
------
 > [4/5] COPY ../../second/target/artifact.file /home/apprunner/app.file:
------
failed to compute cache key: "/second/target/artifact.file" not found: not found

找不到将相对路径替换为绝对路径的原因。

4

1 回答 1

3

COPYADD指令相对于作为最后一个参数传递给命令的上下文路径docker build

我通过以下方式多次解决了这个问题:

  1. 将脱离上下文的文件复制到上下文路径中;
  2. 通过从上下文路径引用它来复制到容器图像;
  3. 删除(临时)复制的文件。

所以你将拥有:

cd first/container
cp ../../second/target/artifact.file artifact.file
docker build -q -t my_image_name .
rm artifact.file

FROM whatever

RUN addgroup -S apprunner && adduser -S apprunner -G apprunner

COPY artifact.file /home/apprunner/app.file

USER apprunner:apprunner
WORKDIR /home/apprunner
EXPOSE 8080

ENTRYPOINT blabla
于 2021-05-28T13:05:54.543 回答