嗯,首先,我需要更多关于您如何使用该容器化应用程序的信息:您是否使用docker-compose 部署它?它是 Docker Swarm 的一部分吗?
根据这一点,可能的解决方案可能会有所不同。
码头工人群
例如,如果您使用 Docker Swarm,您可以将您的 application.yml 定义为模板:
application.yml.template
spring:
kafka:
producer:
properties:
"schema.registry.url": {{ env "schema_registry" }}
然后,您将不得不解析该模板。为此,我假设您已在容器中的 /usr/app 下找到了 Spring Boot 可执行 JAR,并且您的映像名为 springboot-app。
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
所以您现在可以使用 docker stack deploy -c docker-compose.yml springboot-app 部署您的 Swarm。
或者更好的是,如果您在生产环境中工作,您可以将环境变量与通用配置分开:
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
docker-compose.dev.yml
version: "3.8"
services:
springboot-app:
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
并将其部署为docker stack deploy -c docker-compose.yml -c docker-compose.dev.yml springboot-app。
Docker 编写
由于您在最近的评论中提到您正在使用docker-compose,因此使用方式不一样。
首先,并非 Spring 中的所有属性都可以在 Docker Compose 文件中被覆盖,只有那些您可以在构建或启动应用程序时传递给 Maven 的属性。
此外,您似乎错误地定义了 environment 属性,因为通常您提供的所有属性都应该更改点 '.'通过下划线'_',但无论如何,由于通常 Kafka Producer 的配置不仅仅是定义一个 URL,我会使用 Spring 的配置文件功能。
您可以使用所需的配置组合创建多个配置文件,并通过 Compose 通知 Spring 您要使用哪一个。让我们看一个例子。
application.yml
spring:
config:
activate:
on-profile: "development"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-dev-endpoint.com
---
spring:
config:
activate:
on-profile: "production"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-prod-endpoint.com
最后是:
docker-compose.yml
environment:
- SPRING_PROFILES_ACTIVE=development
如果您想进一步检查,您可以在此处获得更多信息:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-set-active-spring-profiles