有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重写docker容器中的Spring启动属性

我有一个固定的spring启动应用程序。默认情况下,应用程序具有spring.cloud.config.enabled=false,因此应用程序不会拾取应用程序。来自configserver的属性。但是,在单独的环境中部署时,我们需要将应用程序与configserver集成,因此我们需要重写spring.cloud.config.enabled属性并将其设置为true

为此,我使用以下docker compose文件运行docker映像:

version: '3'

services:
  my-app-new:
    container_name: my-app
    image: my-app:1.0.0-SNAPSHOT
    ports:
      - "8070:8070"
    environment:
      - SPRING_CLOUD_CONFIG_ENABLED=true
      - SPRING_CLOUD_CONFIG_URI=http://localhost:14180

然而,它就是不起作用。如果我硬编码属性文件中的值,那么它可以很好地集成

我还尝试了以下命令,但仍然无效:

docker run -p 8070:8070 -e SPRING_CLOUD_CONFIG_ENABLED=true -e SPRING_CLOUD_CONFIG_URI=http://localhost:14180 my-app:1.0.0-SNAPSHOT

spring引导版本是2.2.6

让我知道问题出在哪里

更新: 我不能使用配置文件,因为我们公司有太多的环境,甚至虚拟机也在不断变化,所以不能硬编码配置文件。我们需要一个解决方案,我们可以从外部传递某些变量

正如有人在评论中指出的那样,由于spring引导应用程序需要读取环境变量,上述组合yml无法工作。所以我们在互联网上做了一些研究,现在我们在运行映像时传递JAVA_OPTS tomcat变量。像这样:

docker run --env JAVA_OPTS="-Dspring.cloud.config.uri=http://localhost:14180 -Dspring.cloud.config.enabled=true" -p 8080:8080 my-app-image

在docker文件中,我们在像这样启动jar时使用了JAVA_OPTS

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar" ]

但这仍然不起作用。不知道出了什么问题


共 (2) 个答案

  1. # 1 楼答案

    我发现我的设置有问题。我犯了一个愚蠢的错误。配置服务器不在我的docker网络中,我使用localhost与配置服务器通信。Localhost当然意味着我指的是只运行应用程序的应用程序容器IP。相反,当我使用机器的ip地址或主机名时,我的应用程序容器可以成功连接到配置服务器

  2. # 2 楼答案

    为什么不运行container>;进去>;更改配置并提交到新映像。 之后,部署到新环境