使用现有相对路径添加和复制在构建 docker 图像时失败
ADD and COPY with existing relative path fails when building a docker image
环境: Windows 10
, Docker Desktop (Docker Engine v20.10.6)
当第一个参数是以 ../../
开头的相对路径时,Docker 映像在命令 COPY
(和 ADD
)上的构建失败。错误消息显示 ../../a/b/c
之类的任何路径都被 /a/b/c
替换,因此无法在主机上找到。
请帮我找到解决问题的方法。在多篇文章和论坛中,我看到 Docker 可以正确处理相对路径,但在这种情况下无法找出问题所在。
项目文件夹结构
project_root
first
container
Dockerfile
second
target
artifact.file
Docker文件
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
找不到将相对路径替换为绝对路径的原因。
COPY
和 ADD
指令是相对于作为最后一个参数传递给命令 docker build
的上下文路径的。
我通过以下方式多次解决了这个问题:
- 正在将上下文文件复制到上下文路径中;
- 通过从上下文路径引用它复制到容器映像;
- 正在删除(临时)复制的文件。
所以你将拥有:
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
环境: Windows 10
, Docker Desktop (Docker Engine v20.10.6)
当第一个参数是以 ../../
开头的相对路径时,Docker 映像在命令 COPY
(和 ADD
)上的构建失败。错误消息显示 ../../a/b/c
之类的任何路径都被 /a/b/c
替换,因此无法在主机上找到。
请帮我找到解决问题的方法。在多篇文章和论坛中,我看到 Docker 可以正确处理相对路径,但在这种情况下无法找出问题所在。
项目文件夹结构
project_root
first
container
Dockerfile
second
target
artifact.file
Docker文件
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
找不到将相对路径替换为绝对路径的原因。
COPY
和 ADD
指令是相对于作为最后一个参数传递给命令 docker build
的上下文路径的。
我通过以下方式多次解决了这个问题:
- 正在将上下文文件复制到上下文路径中;
- 通过从上下文路径引用它复制到容器映像;
- 正在删除(临时)复制的文件。
所以你将拥有:
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