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

时间:2017-09-20 07:26:30

标签: spring spring-boot docker-compose

我有一个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

1 个答案:

答案 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

  

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

下一步是告诉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