【问题标题】:Testcontainers DockerComposeContainer withEnv测试容器 DockerComposeContainer withEnv
【发布时间】:2021-12-14 10:26:32
【问题描述】:

我正在尝试使用 DockerComposeContainer 将 env 变量传递给在 docker compose 文件中定义的服务

final var compose = new DockerComposeContainer<>(new File("../docker-compose.yml"))
                .withEnv(Map.of("MY_ENV_VAR", "test_value"))
                .withLocalCompose(true);

compose.start();

但我在 docker compose 启动的任何容器中都看不到 MY_ENV_VAR 环境变量。 此外,我找不到任何解释 withEnv 如何与 DockerComposeContainer 一起使用的文档。

如何正确地将 env 从 docker compose 文件传递​​给容器?

【问题讨论】:

    标签: java docker docker-compose testcontainers


    【解决方案1】:

    想通了。必须通过环境。手动变量到 docker-compose 文件中所需的服务:

    # docker-compose.yml
    services:
      my-service:
        environment:
          MY_ENV_VAR: ${MY_ENV_VAR}
    

    【讨论】:

      【解决方案2】:

      docker Compose Module documentation 声明如下。

      在幕后,Testcontainers 实际上会启动一个临时的 Docker Compose 客户端 - 当然是在一个容器中,因此不必在所有开发人员/测试机器上都安装它。

      由于没有关于 withEnv() 方法的文档,所以我查看了源代码并在 env 类字段中找到了 this comment

      应该传递给所有 Compose 和大使容器的属性(不一定传递给 Compose 自身生成的容器)

      据我了解,使用withEnv() 方法传递的环境变量已应用于运行Docker Compose 客户端的容器。因此,如果你想为衍生容器指定环境变量,你应该使用 Docker Compose 配置文件来完成。


      编辑

      使用本地 Docker Compose 实例,environment variables are applied to the docker-compose command。由 Docker Compose 生成的容器不会从请求它们生成的客户端继承环境变量。但是,您仍然可以inject client's environment variables into spawned containers using the configuration file

      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();
      

      【讨论】:

      • 我认为如果指定了.withLocalCompose(true),testcotainers 使用本地 docker-compose 并且不为此启动容器
      • @Max 感谢您的提醒!我已经用更多细节更新了我的答案。
      猜你喜欢
      • 2021-05-19
      • 2018-05-27
      • 2020-09-13
      • 2019-05-23
      • 2021-10-19
      • 2022-01-14
      • 2021-06-14
      • 2020-10-16
      • 2021-09-05
      相关资源
      最近更新 更多