我有一个Spring启动应用程序,它使用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
期间应该使用config.properties
文件夹中的外部/data/some-importer/config
?
答案 0 :(得分:4)
如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
。
注意:关联的答案还提到您可以使用
Dockerfile
在ADD
内添加答案。但是,这会将其添加到图像本身。如果您对配置进行了更改,则必须重建映像才能使这些更改生效。
下一步是告诉Spring启动使用此配置文件。如果您想要一个完全自定义的位置(例如/config/config.properties
),那么您可以在启动期间使用spring.config.location
参数。
注意:如果配置位于certain folders,Spring启动会自动获取配置。否则,您必须使用
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