【问题标题】:Using external config in spring boot application within docker-compose在 docker-compose 中的 Spring Boot 应用程序中使用外部配置
【发布时间】:2017-09-20 07:26:30
【问题描述】:

我有一个 spring boot 应用程序,它使用 com.spotify.dockerfile-maven-plugin 构建我的应用程序 org.rtu/some-importer 的 docker 映像

我的 docker-compose.yml 是:

version: '3'
services:
  some-importer:
    image: org.rtu/some-importer
    build: .
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka: 
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 172.17.0.1
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

我怎么能说在docker-compose up 期间应该使用来自/data/some-importer/config 文件夹的外部config.properties

【问题讨论】:

标签: spring spring-boot docker-compose


【解决方案1】:

正如the comments 中提到的,第一步是mount a host directory in a docker container(就像您为Kafka 所做的那样)。例如,您可以使用:

version: '3'
services:
  some-importer:
    image: org.rtu/some-importer
    build: .
    # Adding a volume/mount
    volumes:
      - /data/some-importer/config:/config

这会将/data/some-importer/config 文件夹映射到您的Docker 容器中的/config

注意:链接的答案还提到您可以使用ADDDockerfile 中添加它。但是,这会将其添加到图像本身。如果您对配置进行更改,则必须重新构建映像才能使这些更改生效。

下一步是告诉 Spring boot 使用这个配置文件。如果您想要一个完全自定义的位置(例如/config/config.properties),那么您可以在启动期间使用spring.config.location 参数。

注意:如果你的配置位于certain folders,Spring boot 会自动获取它。否则,您必须使用spring.config.location 对其进行配置。

我不知道你的图片是什么样子,但你应该可以这样做:

ENTRYPOINT [ "sh", "-c", "java -jar /app.jar --spring.config.location=$CONFIG_LOCATION" ]

我在这里使用了一个名为$CONFIG_LOCATION 的环境变量,这样可以更轻松地使用环境变量自定义位置。例如,您可以在 docker-compose.yml 文件中添加以下内容:

version: '3'
services:
  some-importer:
    image: org.rtu/some-importer
    build: .
    volumes:
      - /data/some-importer/config:/config
    # Configuring the environment variable
    environment:
      - CONFIG_LOCATION=file:/config/config.properties

【讨论】:

  • 非常感谢,我会试试的。我的意思实际上是application.properties,我认为这样的文件会被spring-boot从配置文件夹中自动读取。
  • 顺便说一句,你解释 docker 太棒了,还有一个问题。你知道 docker-compose 中build: . 的骶骨含义吗?即在我的例子中。
  • @RomanT 这取决于。如果将 application.properties 放置在某些目录中,Spring boot 将自动读取它。您可以在Documentation 中找到该列表。 (24.3)
  • @RomanT build 属性可用于引用您的Dockerfile,因此Docker compose can be used to build 图像。你真的不需要它,因为你已经有了 Maven 插件,而且 Docker 所需的工件(例如你的 .jar 文件)也是由 Maven 生成的。
猜你喜欢
  • 2015-05-20
  • 2018-06-20
  • 2021-12-16
  • 2021-12-15
  • 2017-11-04
  • 2021-10-12
  • 1970-01-01
  • 2019-05-31
  • 2021-10-07
相关资源
最近更新 更多