【问题标题】:Multi-Stage Spring Boot Dockerization Using Maven使用 Maven 的多阶段 Spring Boot Dockerization
【发布时间】:2020-03-02 22:14:04
【问题描述】:

试图让多阶段 Spring Boot 应用程序 Dockerfile 工作。

这个想法是:

  1. 使用mvn package 命令构建和打包项目
  2. 运行构建的 .jar 文件

经过一番研究,我找到了this的文章。它提供了完整的 Dockerfile,但对我不起作用。

我修改了最初的 Dockerfile,现在看起来是这样的:

FROM maven:3.6.2-jdk-8-slim AS MAVEN_BUILD

COPY pom.xml /build/
COPY src /build/src/

WORKDIR /build/

RUN mvn -Dmaven.test.skip=true package -Ptest # This line does not work properly

FROM openjdk:8-jre

WORKDIR /app

COPY --from=MAVEN_BUILD /build/target/platform-0.0.1.jar /app/

ENTRYPOINT ["java", "-jar", "platform-0.0.1.jar"]

我创建了一个 docker-compose.yml 来尝试构建这个 Dockerfile:

[...]
  api:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - mysql-db
    ports: 
      - "8080:8085"
[...]

运行docker-compose up --build -d 命令后,我总是得到这个错误:

我错过了什么吗?

在实际项目文件夹中运行mvn -Dmaven.test.skip=true package -Ptest命令正常工作...

【问题讨论】:

  • 对可执行的 maven 文件尝试一些基本操作。例如。尝试尾/头,执行一个基本的 mvn 命令,例如mvn -version,列出/usr/bin/目录的内容。权限是否正确?文件是否存在?也许尝试另一个构建器图像(替代 maven:3.6.2-jdk-8-slim)
  • @Urasche 很好的建议。虽然我已经尝试过mvn -version,但结果相同,我将检查/usr/bin/ 的权限和内容并使用信息更新帖子
  • 好的,在显示/usr/bin的内容后,我得到了这个错误:/bin/bash: /usr/local/bin/docker-entrypoint.sh: Permission denied,然后这个:/bin/sh: 0: Can't open /usr/local/bin/mvn-entrypoint.sh
  • 您如何尝试显示 /usr/bin 的内容?确切的命令是什么?也许尝试以根/系统管理员身份运行容器。在主机上获得 root 访问权限并执行命令:docker-compose up --build -d

标签: spring-boot maven docker dockerfile


【解决方案1】:

问题出在我的 docker 客户端安装上。安装后不知何故没有设置必要的权限。在其他机器上,这个 Dockerfile 可以正常工作。

嗯,这是将来的教训。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 2014-07-11
    • 2018-07-09
    • 2021-07-26
    • 2019-04-15
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多