通过多个系统参数bough docker-compose - > dockerfile - > springboot应用程序位于docker容器中

时间:2016-09-20 15:57:22

标签: spring-boot docker-compose dockerfile

以下是我的docker-compose.yml文件的内容:

eureka-server:
  image: controlsplm/eureka-server
  environment:
      HOST_IP: X.X.X.X
      ACTIVE_PROFILE=docker-development-cloud
  ports:
   - "8761:8761"
  restart: always

以下是我的泊坞文件的内容:

FROM java:8
VOLUME /tmp
ADD eureka-server-0.1.0-SNAPSHOT.jar app.jar
EXPOSE 8761
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Denvironment=$HOST_IP","-Dspring.profiles.active=$ACTIVE_PROFILE","-jar","/app.jar"]

但是当我使用compose运行docker容器时,HOST_IP被选中但不是ACTIVE_PROFILE。我错过了什么?请帮助...

3 个答案:

答案 0 :(得分:1)

我看到两个问题:

  1. ACTIVE_PROFILE的格式错误,@ andreas-jägle在评论中提到的ACTIVE_PROFILE: docker-development-cloud
  2. 入口点使用json数组表示法,这意味着该命令在没有shell的情况下直接执行。 shell(通常是bash)是用它们的值替换变量的,所以你需要在shell中运行才能使用这些变量。您可以使用ENTRYPOINT的字符串形式,也可以使用:

    ENTRYPOINT ["bash", "-c" ,"java - Dspring.profiles.active=$ACTIVE_PROFILE ..."]

答案 1 :(得分:1)

实际上,如果您具有Spring属性

my.spring.property.one = green
my.spring.property.two = blue

您可以按如下所示将它们包括在docker-compose.yml中:

environment:
- my_spring_property_one = green
- my_spring_property_two = blue

为我工作
  • Spring Boot v1.5.10.RELEASE
  • Spring v4.3.14.RELEASE
  • docker版本'3.6'

答案 2 :(得分:0)

我通过在docker-compose.yml文件中添加以下行来解决了这个问题:

eureka-server:
  image: controlsplm/eureka-server:latest
  environment:
     HOST_IP: X.X.X.X
     SPRING_PROFILES_ACTIVE: docker-development-cloud
  ports:
   - "8761:8761"
  restart: always 

以及dockerfile中的以下行:

FROM java:8
VOLUME /tmp
ADD eureka-server-0.1.0-SNAPSHOT.jar app.jar
EXPOSE 8761
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Denvironment=$HOST_IP","-jar","/app.jar"]