【问题标题】:Pass multiple system parameters thorugh docker-compose-->dockerfile--> springboot application housed in docker container通过 docker-compose-->dockerfile--> 存放在 docker 容器中的 spring boot 应用程序传递多个系统参数
【发布时间】:2017-01-28 15:40:28
【问题描述】:

以下是我的 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

以下是我的 docker 文件的内容:

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。我在这里想念什么吗?请帮忙...

【问题讨论】:

  • 您确定撰写文件与您机器上的文件匹配吗?环境部分看起来很乱。请在此处发布时检查是否有一些拼写错误。否则我会假设您在运行 compose 时会看到一些错误。
  • @Andreas,我没有看到错误,但是当启动启动应用程序启动时,它告诉活动配置文件是 ${ACTIVE_PROFILE},但它没有值“docker_development_cloud”..我是新手,可以请您指导一下这里出了什么问题:)
  • 我认为你混合了数组和字典符号来传递变量。见这里:docs.docker.com/compose/compose-file/#/environment。因此,要么使用带等号 (=) 的连字符 (-),要么使用不带连字符但使用冒号 (:) 的字典表示法。一个简单的调试方法是用打印所有环境变量的env 覆盖命令。
  • eureka-server: image: controlsplm/eureka-server environment: - HOST_IP=13.68.114.134 - ACTIVE_PROFILE=docker-development-cloud ports: - "8761:8761" restart: always 上面两个变量未被应用程序提取
  • 请扩展您的问题,而不是在此处的 cmets 中粘贴多行代码。查看我在上面发布的链接并尝试docker-compose run eureka-server env 以查看容器启动时哪些变量可用。

标签: spring-boot docker-compose dockerfile


【解决方案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'

【讨论】:

  • 感谢@yehouda-bouskila 的建议;不过,我部分接受了您的更改:我不确定“。”实际上用作分隔符。他们没有使用指定版本的 spring 等。如果现在,他们这样做了,请。发布为单独的答案,包括。版本。
【解决方案2】:

我看到两个问题:

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

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

【讨论】:

    【解决方案3】:

    我通过在我的 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"]
    

    【讨论】:

      猜你喜欢
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2020-04-07
      • 2019-05-31
      • 1970-01-01
      • 2021-03-21
      相关资源
      最近更新 更多