【问题标题】:Execute mvn clean install before docker-compose commands在 docker-compose 命令之前执行 mvn clean install
【发布时间】:2020-03-23 21:19:32
【问题描述】:

我在 docker 容器中运行多个 spring-boot 微服务。 我正在编写 docker-compose.yml 文件来自动部署,但我有一个问题。 所有 spring-boot 微服务都有不同的配置文件,具体取决于您是否想在没有 docker 的情况下在本地运行它们以及另一个 ig 您想用 docker 运行它们(基本上每个配置文件都会更改微服务之间客户端的 URls)。

如果我运行 docker-compose up 并且已经编译的 jar 文件没有使用“docker”spring-boot 配置文件编译,它将使用错误的 jar 创建图像。

我的 Docker-COMPOSE.YML 示例:

version: "3"

services:
  imageserver:
    build:
      context: ./ImageServer
      dockerfile: Dockerfile
    ports:
      - 8081:8081
    networks:
      - my-private-network
  core:
    build:
      context: ./Core
      dockerfile: Dockerfile
    ports:
      - 8082:8082
    networks:
      - my-private-network

networks:
  my-private-network:
  my-public-network

我的一个 Dockerfile 示例:

FROM openjdk:8-jdk-alpine
LABEL maintainer="lalala@gmail.com"
VOLUME /tmp
EXPOSE 8082
COPY ./target/*.jar Core.jar
ENTRYPOINT ["java","-jar","/Core.jar"]

有没有办法在运行 docker-compose 之前在每个目录中执行类似“mvn clean install -P docker”的命令,以确保将包含在图像中的 jar 已使用正确的配置文件编译? 该命令必须在创建容器之前被激发(在容器外编译将包含在容器内而不是在容器内的 jar)

谢谢

【问题讨论】:

  • 必须在创建容器之前激活命令(从容器中编译将包含在容器中而不是在容器内的 jar)
  • 您可能会更好地尝试构建图像,这样您就不需要重新构建它们以在不同的环境中运行它们。 Spring Boot 可以set properties from environment variables,这将是解决此问题的更好方法。

标签: maven spring-boot docker compilation docker-compose


【解决方案1】:

您必须能够在 Dockerfile 上使用 RUN,并提供maven clean install。但你为什么要这样做?将 Docker 构建集成到您的 maven 中,并在您要构建图像的配置文件中进行相同的配置。 Refer here.

【讨论】:

  • 我不想在容器中编译代码但是谢谢
【解决方案2】:

我找到了更好的解决方案! http://www.littlebigextra.com/use-spring-profiles-docker-containers/

我可以在不使用配置文件的情况下进行编译,但是我可以使用 java -jar 选择 spring 配置文件!

感谢您的 cmets 回复!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 2016-11-11
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多