Docker:COPY 在运行“docker build”的本地目录中找不到文件

lil*_*ily 3 docker

在前缀为 的目录下/home/gitlab-runner/builds/,有一个 example.jar 文件和一个 Dockerfile,Dockerfile 中有如下语句:

COPY example.jar /app
Run Code Online (Sandbox Code Playgroud)

我跑

  docker build -t image_name ./
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

COPY failed: stat /var/lib/docker/tmp/docker-builder457658077/example.jar: no such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么COPY在带有前缀的目录中找不到 example.jar /home/gitlab-runner/builds/?奇怪的路径是怎么/var/lib/docker..跳进来的?怎么处理这个问题?谢谢!


    [root@koala 53bdd1747e3590f90fcc84ef4963d4885711e25f]# pwd
    /home/gitlab-runner/builds/pica/eureka/53bdd1747e3590f90fcc84ef4963d4885711e25f
    [root@koala 53bdd1747e3590f90fcc84ef4963d4885711e25f]# ls -al
    total 52068
    drwxrwxr-x 5 gitlab-runner gitlab-runner     4096 Dec 11 15:23 .
    drwxrwxr-x 4 gitlab-runner gitlab-runner     4096 Dec 11 11:35 ..
    -rw-rw-r-- 1 gitlab-runner gitlab-runner       17 Dec 11 11:35 APPLICATION_VERSION
    -rw-rw-r-- 1 gitlab-runner gitlab-runner      644 Dec 11 11:35 docker-compose.yml
    -rw-rw-r-- 1 gitlab-runner gitlab-runner      568 Dec 11 15:23 Dockerfile
    drwxrwxr-x 8 gitlab-runner gitlab-runner     4096 Dec 11 11:35 .git
    -rw-rw-r-- 1 gitlab-runner gitlab-runner      322 Dec 11 11:35 .gitignore
    -rw-rw-r-- 1 gitlab-runner gitlab-runner     2438 Dec 11 11:35 .gitlab-ci.yml
    -rw-rw-r-- 1 gitlab-runner gitlab-runner 53271183 Dec 11 11:35 example.jar
    -rw-rw-r-- 1 gitlab-runner gitlab-runner     1043 Dec 11 11:35 pom.xml
    drwxrwxr-x 4 gitlab-runner gitlab-runner     4096 Dec 11 11:35 src
    drwxrwxr-x 8 gitlab-runner gitlab-runner     4096 Dec 11 11:35 target
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 5

[从服务器故障复制我的答案,没有意识到这个问题被交叉发布了]

COPY example.jar /app
Run Code Online (Sandbox Code Playgroud)

此命令需要example.jar在构建上下文的根目录中。构建上下文是 的最后一个参数docker build(在本例中.为当前目录)。从ls -al输出来看,您没有将此 jar 文件归档到目录中,并且 docker 告诉您 COPY 命令在构建上下文中找不到 example.jar。如果它位于其他子目录之一,您需要使用该位置更新 COPY 命令。


要调试构建上下文的问题,您可以构建并运行以下 Dockerfile:

FROM busybox
COPY . /build-context
WORKDIR /build-context
CMD find .
Run Code Online (Sandbox Code Playgroud)

这会将整个构建上下文复制到图像中,并在运行容器时使用 find 命令列出内容。