Testcontainers DockerComposeContainer withEnv



我试图将环境变量传递到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();

相关内容

  • 没有找到相关文章

最新更新