当前位置: 首页 > 知识库问答 >
问题:

创建docker映像时,使用现有相对路径添加和复制失败[复制]

能远
2023-03-14

env:Windows 10Docker Desktop(Docker Engine v20.10.6)

当Docker映像的第一个参数是以开头的相对路径时,在命令COPY(和ADD)上生成Docker映像失败/ 。错误消息显示任何路径,如。//a/b/c被替换为/a/b/c,因此无法在主机上找到。

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

项目文件夹结构

project_root
  first
    container
       Dockerfile
  second
    target
       artifact.file

文档

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

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


共有1个答案

吕向阳
2023-03-14

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
 类似资料:
  • 我正试图用集装箱装一个样品。docker内的js应用程序。 我的docker文件如下,我在项目的工作目录中 我可以成功创建图像 无论如何,当我想运行应用程序时,它并不是一个正在运行的docker镜像 我不知道我哪里做错了? [PS:]根据评论,我已将CMD更改为 但是我不能构建镜像

  • 我的本地服务器上有一个工作的Docker Compose,现在我必须转到prod,我只是复制了prod服务器上的整个目录,相同的目录结构、配置文件等。但是当我运行Docker Compose命令(Docker-Compose-f Docker-Compose.dev.yml up)时,它抛出了以下错误: 步骤 7/28 : 复制 ../../data_acquisition_survey_api/

  • 在dockerfile中,有相同的方法将copy命令与相对路径一起使用吗?我正在尝试使用: OBS。:我的结构文件夹(我在项目测试上运行dockerfile,另一个文件在项目控制台文件夹中)是: |-项目控制台 |-项目测试 Im收到以下错误: 错误:服务“app”无法生成:复制失败:未指定源文件。 我的目的是在同一个docker中有两个项目。我有一个dotnet核心控制台和另一个带有unity测

  • 我的dockerfile中有以下行 当我尝试使用docker-comment构建图像时,我得到了 服务前端构建失败:lstat /root/url.net/volumes/persistent/url/root:没有这样的文件或目录 我可以从任何地方cd到根目录。net/volumes/persistent/url/root在我的机器上没有问题。 如何在dockerfile中指定文件夹的绝对路径?

  • 我想在我的Ubuntu上运行我的 Scrape.py Docker。我的步骤: 我使用 我创建了一个Docker文件: 请问有什么问题?谢谢

  • 我尝试使用minikube从本地docker镜像和docker hub部署kubernetes。但两者都不起作用。 方法1:使用保存和加载tar文件,创建了图像,它可用于kubectl。 执行以下命令以创建部署: 从kubectl描述pod命令, 方法2:我将映像推送到我的docker hub存储库(https://hub.docker.com/r/get2arun/elk/tags),然后在终端