Spring boot 通过docker compose传递多个系统参数-->;dockerfile-->;springboot应用程序位于docker容器中
以下是我的docker-compose.yml文件的内容: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
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
bash
)将变量替换为它们的值,因此需要在shell中运行才能使用这些变量。您可以使用入口点的字符串形式,也可以使用:
ENTRYPOINT[“bash”、“-c”、“java-Dspring.profiles.active=$active\u PROFILE…”]
ACTIVE_PROFILE
的格式错误,它将是@andreas-jägle在评论中提到的ACTIVE_PROFILE:docker development cloud
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”
-
),要么使用不带连字符但使用冒号的字典符号(:
)。一种简单的调试方法是使用打印所有环境变量的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等。。如果到现在,他们有,请。作为单独的答案张贴,包括版本。