簡體   English   中英

測試容器 DockerComposeContainer withEnv

[英]Testcontainers DockerComposeContainer withEnv

我正在嘗試使用 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 withEnv工作的文檔。

如何從docker compose文件正確地將env傳遞給容器?

弄清楚了。 必須通過 env。 將變量手動添加到 docker-compose 文件中所需的服務:

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

docker Compose Module 文檔說明如下。

在幕后,Testcontainers 實際上啟動了一個臨時的 Docker Compose 客戶端——當然是在容器中,所以沒有必要將它安裝在所有開發人員/測試機器上。

由於沒有關於withEnv()方法的文檔,我查看了源代碼並在env類字段中找到了此注釋

應該傳遞給所有 Compose 和大使容器的屬性(不一定傳遞給 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM