docker - 多阶段构建无法找到文件

标签 docker docker-compose dockerfile

这是我第一次使用多阶段程序,运行docker-compose up时出现此错误:

worker_1 | Error: Unable to access jarfile worker-jar-with-dependencies.jar


因此,似乎没有找到该文件。
Docker文件
FROM maven:3.5-jdk-8-alpine AS builder
ADD pom.xml .
RUN mvn dependency:resolve
#RUN /bin/sh -c cd src/
RUN mvn package

FROM openjdk:8-jre-alpine
COPY --from=builder target/worker-jar-with-dependencies.jar .
#RUN java -jar worker-jar-with-dependencies.jar
CMD ["java", "-jar", "worker-jar-with-dependencies.jar"]
以及我的docker-compose.yml的外观
version: '3.0'
services:
    poll:
        build: poll/.
        ports:
            - "5000:80"
        networks: 
            - poll-tier
    redis:
        image: "redis"
        expose: 
            - "6379"
        networks:
            - back-tier
            - poll-tier
    worker:
        build: worker/.
        networks: 
            - back-tier
    db:
        image: "postgres"
        volumes:
            - "db-data:/var/lib/postgresql/data"
        networks:
            - back-tier
            - result-tier
        environment:
            POSTGRES_PASSWORD: popeye
    
    result:
        build: result/.
        ports:
            - "5001:80"
        networks: 
            - result-tier
    
volumes:
    db-data:
networks:
    poll-tier: {}
    result-tier: {}
    back-tier: {}

最佳答案

看起来您没有在Dockerfile中添加源代码。您的pom仅具有ADD命令,而源中没有一个命令。我想说的是,在“RUN mvn软件包”之前添加“COPY src / src”之类的内容。
不确定是否正在使用springboot,但这是springboot应用程序的多阶段构建示例:

FROM maven:3.6.3-jdk-11 AS builder
WORKDIR /workdir/server
COPY pom.xml /workdir/server/pom.xml
RUN mvn dependency:go-offline

COPY src /workdir/server/src
RUN mvn install
RUN mkdir  -p target/depency
WORKDIR /workdir/server/target/dependency
RUN jar -xf ../*.jar

FROM openjdk:11-jre-slim

EXPOSE 8080
VOLUME /tmp
ARG DEPENDENCY=/workdir/server/target/dependency
COPY --from=builder ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=builder ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=builder ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.company.project.Application"]
您可以在此docker repo中找到以下示例以及其他不错的docker-compose示例:https://github.com/docker/awesome-compose

关于docker - 多阶段构建无法找到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63935745/

相关文章:

docker - docker-compose无法连接到docker守护进程?

symfony - fedora中用于docker的setfacl权限以获取symfony缓存

node.js - 如何将具有数据(我需要此数据)的Pod容器路径安装到kubernetes中的本地主机路径

go - 尝试运行 docker-compose up -d 时出现错误

django - 如何使用 docker-compose 删除 `django_admin_log`?

macos - 运行时Docker OSX端口映射错误:exec

continuous-integration - 是否有任何 CI 服务允许您构建 Docker 容器并使用 docker build 缓存?

java - Ping 工作但 Java 代码失败,主机在 Docker 中无法访问

docker - 为什么在 docker-compose.yml 中使用标签,环境不能完成这项工作?

javascript - 如何构建 React 应用程序的 docker 镜像?