Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 通过docker compose传递多个系统参数-->;dockerfile-->;springboot应用程序位于docker容器中_Spring Boot_Docker Compose_Dockerfile - Fatal编程技术网

Spring boot 通过docker compose传递多个系统参数-->;dockerfile-->;springboot应用程序位于docker容器中

Spring boot 通过docker compose传递多个系统参数-->;dockerfile-->;springboot应用程序位于docker容器中,spring-boot,docker-compose,dockerfile,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 eureka-server: image: controlsplm/eurek

以下是我的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
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 
下面是我的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容器时,会拾取主机IP,但不会激活主机配置文件。我有什么遗漏吗?请帮忙…

我发现两个问题:

  • ACTIVE_PROFILE
    的格式错误,它将是@andreas-jägle在评论中提到的
    ACTIVE_PROFILE:docker development cloud
  • entrypoint使用json数组表示法,这意味着命令直接执行,而不需要shell。shell(通常是
    bash
    )将变量替换为它们的值,因此需要在shell中运行才能使用这些变量。您可以使用
    入口点的字符串形式,也可以使用:

    ENTRYPOINT[“bash”、“-c”、“java-Dspring.profiles.active=$active\u PROFILE…”]

  • 我看到两个问题:

  • ACTIVE_PROFILE
    的格式错误,它将是@andreas-jägle在评论中提到的
    ACTIVE_PROFILE:docker development cloud
  • entrypoint使用json数组表示法,这意味着命令直接执行,而不需要shell。shell(通常是
    bash
    )将变量替换为它们的值,因此需要在shell中运行才能使用这些变量。您可以使用
    入口点的字符串形式,也可以使用:

    ENTRYPOINT[“bash”、“-c”、“java-Dspring.profiles.active=$active\u PROFILE…”]


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

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

    事实上,如果您具有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
    
    为我的同事工作

    • 弹簧靴v1.5.10.1版本
    • Spring v4.3.14.1版本
    • docker版本“3.6”

    事实上,如果您具有弹簧特性

    my.spring.property.one=green
    my.spring.property.two=blue
    
    您可以将它们包括在docker-compose.yml中,如下所示:

    environment:
    - my_spring_property_one=green
    - my_spring_property_two=blue
    
    为我的同事工作

    • 弹簧靴v1.5.10.1版本
    • Spring v4.3.14.1版本
    • docker版本“3.6”

    您确定撰写文件与您计算机上的文件匹配吗?环境部分看起来一团糟。请检查在这里发布时是否有一些拼写错误。否则,我会假设,您在运行compose时会看到一些错误。@Andreas,我没有看到错误,但在启动启动启动应用程序时,它会告诉active profile为${active\u profile},但它不接受“docker\u development\u cloud”值。。我对这一点还不熟悉,你能告诉我这里出了什么问题吗:)我想你混合了数组和字典符号来传递变量。请参见此处:。因此,要么使用带等号的连字符(
    -
    ),要么使用不带连字符但使用冒号的字典符号(
    )。一种简单的调试方法是使用打印所有环境变量的
    env
    覆盖命令。eureka-server:image:controlsplm/eureka-server-environment:-HOST_IP=13.68.114.134-ACTIVE_PROFILE=docker development云端口:-“8761:8761”重新启动:始终使用上述两个变量,应用程序不会选择这两个变量。请扩展您的问题,而不是在此处的注释中粘贴多行代码。请查看我在上面发布的链接,然后尝试
    docker compose run eureka server env
    ,查看容器启动时哪些变量可用。您确定compose文件与您计算机上的文件匹配吗?环境部分看起来一团糟。请检查在这里发布时是否有一些拼写错误。否则,我会假设,您在运行compose时会看到一些错误。@Andreas,我没有看到错误,但在启动启动启动应用程序时,它会告诉active profile为${active\u profile},但它不接受“docker\u development\u cloud”值。。我对这一点还不熟悉,你能告诉我这里出了什么问题吗:)我想你混合了数组和字典符号来传递变量。请参见此处:。因此,要么使用带等号的连字符(
    -
    ),要么使用不带连字符但使用冒号的字典符号(
    )。一种简单的调试方法是使用打印所有环境变量的
    env
    覆盖命令。eureka-server:image:controlsplm/eureka-server-environment:-HOST_IP=13.68.114.134-ACTIVE_PROFILE=docker development云端口:-“8761:8761”重新启动:始终使用上述两个变量,应用程序不会选择这两个变量。请扩展您的问题,而不是在此处的注释中粘贴多行代码。查看我上面发布的链接,尝试运行eureka server env
    查看容器启动时哪些变量可用。感谢@yehouda bouskila的建议;不过,我部分接受了您的更改:我不确定“.”是否真的起到分隔符的作用。他们没有使用指定版本的spring等。。如果到现在,他们有,请。作为单独的答案发布,包括版本。感谢@yehouda bouskila的建议;不过,我部分接受了您的更改:我不确定“.”是否真的起到分隔符的作用。他们没有使用指定版本的spring等。。如果到现在,他们有,请。作为单独的答案张贴,包括版本。