我试图将环境变量传递到docker组合文件中定义的服务与DockerComposeContainer
final var compose = new DockerComposeContainer<>(new File("../docker-compose.yml"))
.withEnv(Map.of("MY_ENV_VAR", "test_value"))
.withLocalCompose(true);
compose.start();
但是我看不到MY_ENV_VAR由docker compose启动的任何容器中的环境变量。另外,我找不到任何文档解释withEnv
如何与DockerComposeContainer一起工作。
如何正确地传递环境容器从docker撰写文件?
明白了。必须通过嫉妒。在docker-compose文件中手动更改所需的服务:
# docker-compose.yml
services:
my-service:
environment:
MY_ENV_VAR: ${MY_ENV_VAR}
docker Compose Module文档说明如下:
在幕后,Testcontainers实际上启动了一个临时的Docker Compose客户端——当然是在容器中,所以没有必要在所有开发人员/测试机器上安装它。
由于没有关于withEnv()
方法的文档,我去查看源代码,并在env
类字段中找到了这条注释。
应该传递给所有Compose和ambassador容器的属性(不一定要传递给Compose本身生成的容器)
据我所知,使用withEnv()
方法传递的环境变量应用于运行Docker Compose客户端的容器。因此,如果你想为生成的容器指定环境变量,你应该使用Docker Compose配置文件来完成。
编辑
对于本地Docker Compose实例,环境变量应用于Docker - Compose命令。由Docker Compose生成的容器不会从请求生成它们的客户端继承环境变量。但是,您仍然可以使用配置文件将客户端的环境变量注入生成的容器中。
version: "3.9"
services:
test:
image: busybox
environment:
TEST_ENV_VAR: ${TEST_ENV_VAR:default-value}
command: printenv
然后你的Java代码应该能够像预期的那样注入它。
new DockerComposeContainer<>(new File("../docker-compose.yml"))
.withEnv(Map.of("TEST_ENV_VAR", "test_value"))
.withLocalCompose(true)
.start();