如何通过DockerComposeContainer为docker compose服务传递环境变量
问题根因
DockerComposeContainer提供的withEnv方法作用是给宿主机上执行docker compose命令的进程设置环境变量,不会直接注入到compose编排的业务容器中。只有当docker-compose.yml内显式声明了对应环境变量的占位引用,该值才会被docker compose传递到容器内部。
解决方案
方案1:修改docker-compose.yml添加占位引用(适配全局变量传递)
先在compose文件中给需要读取环境变量的服务配置变量引用,示例:
version: '3' services: 你的服务名称: image: 你的镜像名 environment: # 引用docker compose进程的环境变量 MY_ENV_VAR: ${MY_ENV_VAR}
修改后你原有Java代码无需调整,容器启动后就能读到MY_ENV_VAR=test_value。如果有多个服务需要读取该变量,给每个服务的environment配置段都加上对应引用即可。
方案2:直接给指定服务注入环境变量(无需修改compose文件)
如果不想改动原有compose配置,可以使用withServiceEnv方法直接给指定服务的容器设置环境变量,示例代码:
final var compose = new DockerComposeContainer<>(new File("../docker-compose.yml")) .withLocalCompose(true) // 第一个参数为compose中定义的服务名称,第二个为环境变量key,第三个为环境变量值 .withServiceEnv("你的服务名称", "MY_ENV_VAR", "test_value"); compose.start();
如果要给多个服务传递同一个变量,给每个服务分别调用一次withServiceEnv即可。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

