Docker COPY 没有这样的文件或目录

2024-03-28

构建 docker 映像在复制任务中失败。没有这样的文件或目录。我正在使用你好世界春天的例子 https://spring.io/guides/gs/spring-boot-docker/

从 openjdk 构建:8-jdk-alpine

Run echo ${PWD}印刷 /Run ls打印一组正常目录(/usr /var 等),但不存在项目文件

为什么 docker 不使用 WORKING 目录?

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]

要复制的文件由 gradle 准备,我可以确认它们是否存在:

task unpack(type: Copy) {
    dependsOn bootJar
    from(zipTree(tasks.bootJar.outputs.files.singleFile))
    into("build/dependency")
}

我在跑步

docker build .

docker gradle 任务

docker {
    name "${project.group}/${bootJar.baseName}"
    copySpec.from(tasks.unpack.outputs).into("dependency")
    buildArgs(['DEPENDENCY': "dependency"])
}

Problem

docker build -t springio/gs-spring-boot-docker .
Sending build context to Docker daemon  16.78MB
Step 1/8 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/8 : RUN addgroup -S spring && adduser -S spring -G spring
 ---> Using cache
 ---> 5b122a1db135
Step 3/8 : USER spring:spring
 ---> Using cache
 ---> 3bdba2028e42
Step 4/8 : ARG DEPENDENCY=target/dependency
 ---> Using cache
 ---> 616945cc41ed
Step 5/8 : COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY failed: file not found in build context or excluded by .dockerignore: stat target/dependency/BOOT-INF/lib: file does not exist

Fix

mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

将创建以下文件夹布局。 这样做是为了解释 docker 镜像的分层选项。这一切都在示例 3.Dockerfile https://spring.io/guides/gs/spring-boot-docker/#initial

   $pwd
   /java-training/workspace/gs-spring-boot-docker/complete
   $tree -L 3 target/dependency
    target/dependency
    ├── BOOT-INF
    │   ├── classes
    │   │   ├── application.yml
    │   │   └── hello
    │   ├── classpath.idx
    │   └── lib
    │       ├── jackson-annotations-2.11.0.jar
    │       ├── jackson-core-2.11.0.jar
    │       ├── jackson-databind-2.11.0.jar
    │       ├── jackson-datatype-jdk8-2.11.0.jar
    │       ├── jackson-datatype-jsr310-2.11.0.jar
    │       ├── jackson-module-parameter-names-2.11.0.jar
    │       ├── jakarta.annotation-api-1.3.5.jar
    │       ├── jakarta.el-3.0.3.jar
    │       ├── jul-to-slf4j-1.7.30.jar
    │       ├── log4j-api-2.13.2.jar
    │       ├── log4j-to-slf4j-2.13.2.jar
    │       ├── logback-classic-1.2.3.jar
    │       ├── logback-core-1.2.3.jar
    │       ├── slf4j-api-1.7.30.jar
    │       ├── snakeyaml-1.26.jar
    │       ├── spring-aop-5.2.6.RELEASE.jar
    │       ├── spring-beans-5.2.6.RELEASE.jar
    │       ├── spring-boot-2.3.0.RELEASE.jar
    │       ├── spring-boot-autoconfigure-2.3.0.RELEASE.jar
    │       ├── spring-boot-starter-2.3.0.RELEASE.jar
    │       ├── spring-boot-starter-json-2.3.0.RELEASE.jar
    │       ├── spring-boot-starter-logging-2.3.0.RELEASE.jar
    │       ├── spring-boot-starter-tomcat-2.3.0.RELEASE.jar
    │       ├── spring-boot-starter-web-2.3.0.RELEASE.jar
    │       ├── spring-context-5.2.6.RELEASE.jar
    │       ├── spring-core-5.2.6.RELEASE.jar
    │       ├── spring-expression-5.2.6.RELEASE.jar
    │       ├── spring-jcl-5.2.6.RELEASE.jar
    │       ├── spring-web-5.2.6.RELEASE.jar
    │       ├── spring-webmvc-5.2.6.RELEASE.jar
    │       ├── tomcat-embed-core-9.0.35.jar
    │       └── tomcat-embed-websocket-9.0.35.jar
    ├── META-INF
    │   ├── MANIFEST.MF
    │   └── maven
    │       └── org.springframework
    └── org
        └── springframework
            └── boot

现在您可以构建它了!

 docker build -t springio/gs-spring-boot-docker .
Sending build context to Docker daemon  33.44MB
Step 1/8 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/8 : RUN addgroup -S spring && adduser -S spring -G spring
 ---> Using cache
 ---> 5b122a1db135
Step 3/8 : USER spring:spring
 ---> Using cache
 ---> 3bdba2028e42
Step 4/8 : ARG DEPENDENCY=target/dependency
 ---> Using cache
 ---> 616945cc41ed
Step 5/8 : COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
 ---> Using cache
 ---> 1d1404d8b0e7
Step 6/8 : COPY ${DEPENDENCY}/META-INF /app/META-INF
 ---> Using cache
 ---> ad8c03fa8c4e
Step 7/8 : COPY ${DEPENDENCY}/BOOT-INF/classes /app
 ---> Using cache
 ---> 2aaadf41ccd2
Step 8/8 : ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]
 ---> Using cache
 ---> a21e7f0c88fc
Successfully built a21e7f0c88fc
Successfully tagged springio/gs-spring-boot-docker:latest

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker COPY 没有这样的文件或目录 的相关文章

随机推荐