当前位置: 首页 > 知识库问答 >
问题:

覆盖docker容器中的Spring Boot属性

霍浩皛
2023-03-14

我有一个被Dockerized的spring boot应用程序。默认情况下,应用程序具有spring.cloud.config.enabled=false,因此应用程序不会从ConfigServer获取application.properties。但是,在单独的环境中部署时,我们需要将应用程序与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

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

正如有人在注释中指出的那样,上面的compose yml并不起作用,因为Spring Boot应用程序需要读取环境变量。因此,我们在internet上做了一些研究,现在我们在运行映像时传递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" ]

共有1个答案

张照
2023-03-14

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

 类似资料:
  • 问题内容: 我目前使用Docker Swarm和Consul设置了3个EC2实例。我有3个简单的节点应用程序分布在所有3个实例上,然后使用nginx在我的集群主机上进行路由。 使用覆盖网络指南,我创建了一个名为的新覆盖,并使每个容器都连接到该网络。使用I可以确认每个节点容器和nginx容器都已连接并具有IP。但是,在进入我的nginx容器后,它只能通过网络与位于同一主机上的节点应用程序通信,而不能

  • 问题内容: 我注意到编译器不会让我用另一个存储的值覆盖存储的属性(这似乎很奇怪): 但是,我可以使用计算属性来执行此操作: 为什么不允许我再给它一个值? 为什么用存储的属性覆盖是可憎的,而要使用计算的一个犹太洁食呢?他们在想什么呢? 问题答案: 为什么不允许我再给它另一个值? 绝对可以为继承的属性赋予不同的值。如果您在采用该初始值的构造函数中初始化属性,然后传递与派生类不同的值,则可以执行此操作:

  • Iv创建了两个Springboot应用程序,Iv对其进行了文档化并创建了本地容器。当我通过intellij在我的机器上本地运行应用程序时,它们工作正常。localhost:8080上的应用程序A有一个Spring WebClient,其中有一个base Urllocalhost:8081配置为调用在端口8081上运行的应用程序B。这工作得很好。 当我将这些容器添加到 docker compose

  • 我拉出了mysql docker映像,并用命令运行容器: 此时,springBoot在本地工作。它与MySQL连接: 现在,我希望springBoot应用程序也在单独的docker容器上,在同一服务器上。为此,我使用了DockerFile: 同样,它无法连接到数据库:

  • 在spring boot中@RequestBody内容到达控制器之前,我如何覆盖它? > 此外,我还搜索了Request estBodyAdviceAdapter。 有几个链接对spring boot不起作用。 如何多次读取request.getInputStream() 如何在Spring引导到达控制器之前修改请求正文 现在,我可以将输入流读入字符串中,进行一些修改并设置回控制器的输入流吗?

  • 我有几个POJO,这将有一个货币数额。我的想法是创建一个通用对象(由货币和值组成),然后每当我想在我的POJOs中表示一个货币金额时,就会使用它: 由于将在多个POJO中使用,我无法用注释和属性,因为在所有情况下,列名并不总是相同的。有没有办法注释属性(如上例中的)以提供和属性的列名,以便jOOQ在映射/取消映射POJO时理解它们,类似于Hibernate解释请问?