在docker compose中的spring boot应用程序中使用外部配置
我有一个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
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生成。