在docker compose中的spring boot应用程序中使用外部配置

在docker compose中的spring boot应用程序中使用外部配置,spring,spring-boot,docker-compose,Spring,Spring Boot,Docker Compose,我有一个spring boot应用程序,它使用com.spotify.dockerfile maven插件构建我的应用程序org.rtu/some-importer的docker映像 我的docker-compose.yml是: version: '3' services: some-importer: image: org.rtu/some-importer build: . zookeeper: image: wurstmeister/zookeeper

我有一个spring boot应用程序,它使用
com.spotify.dockerfile maven插件
构建我的应用程序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
文件夹中的外部
配置属性呢?

如中所述,第一步是(就像您对卡夫卡所做的那样)。例如,您可以使用:

版本:“3”
服务:
一些进口商:
图片:org.rtu/some-importer
生成:。
#添加卷/装载
卷数:
-/data/some导入器/config:/config
这将把
/data/some importer/config
文件夹映射到Docker容器中的
/config

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

下一步是告诉Spring boot使用此配置文件。如果您想要一个完全定制的位置(例如,
/config/config.properties
),则可以在启动期间使用该参数

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

我不知道您的图像是什么样子,但您应该能够做到以下几点:

ENTRYPOINT [ "sh", "-c", "java -jar /app.jar --spring.config.location=$CONFIG_LOCATION" ]
我在这里使用了一个名为
$CONFIG\u LOCATION
的环境变量,这使得通过使用环境变量来定制位置更加容易。例如,您可以在
docker compose.yml
文件中添加以下内容:

版本:“3”
服务:
一些进口商:
图片:org.rtu/some-importer
生成:。
卷数:
-/data/some导入器/config:/config
#配置环境变量
环境:
-CONFIG\u LOCATION=file:/CONFIG/CONFIG.properties
如中所述,第一步是(就像你为卡夫卡所做的那样)。例如,您可以使用:

版本:“3”
服务:
一些进口商:
图片:org.rtu/some-importer
生成:。
#添加卷/装载
卷数:
-/data/some导入器/config:/config
这将把
/data/some importer/config
文件夹映射到Docker容器中的
/config

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

下一步是告诉Spring boot使用此配置文件。如果您想要一个完全定制的位置(例如,
/config/config.properties
),则可以在启动期间使用该参数

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

我不知道您的图像是什么样子,但您应该能够做到以下几点:

ENTRYPOINT [ "sh", "-c", "java -jar /app.jar --spring.config.location=$CONFIG_LOCATION" ]
我在这里使用了一个名为
$CONFIG\u LOCATION
的环境变量,这使得通过使用环境变量来定制位置更加容易。例如,您可以在
docker compose.yml
文件中添加以下内容:

版本:“3”
服务:
一些进口商:
图片:org.rtu/some-importer
生成:。
卷数:
-/data/some导入器/config:/config
#配置环境变量
环境:
-CONFIG\u LOCATION=file:/CONFIG/CONFIG.properties

可能重复的可能重复的可能重复的非常感谢,我将尝试一下。我的意思是,实际上,
application.properties
,我想这样的文件会被spring引导从config folder自动读取。顺便说一句,你解释docker这么棒,还有一个问题。你知道
build:”的神圣意义是什么吗在docker compose中?在我的例子中,@RomanT,这要视情况而定。如果Spring boot位于某些目录中,它将自动读取
应用程序.properties
。您可以在中找到该列表。(24.3)@RomanT该属性可用于引用您的
Dockerfile
,因此图像。你并不真的需要它,因为你已经有了Maven插件,Docker所需的工件(例如你的
.jar
文件)也是由Maven生成的。非常感谢,我会尝试一下。我的意思是,实际上,
application.properties
,我想这样的文件会被spring引导从config folder自动读取。顺便说一句,你解释docker这么棒,还有一个问题。你知道
build:”的神圣意义是什么吗在docker compose中?在我的例子中,@RomanT,这要视情况而定。如果Spring boot位于某些目录中,它将自动读取
应用程序.properties
。您可以在中找到该列表。(24.3)@RomanT该属性可用于引用您的
Dockerfile
,因此图像。您并不真正需要它,因为您已经有了Maven插件,Docker所需的工件(例如,
.jar
文件)也由Maven生成。