构建 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(使用前将#替换为@)