【发布时间】: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