为什么 Testcontainers 的 withEnv 不能让镜像拉取走代理
请为失败的拉取配置 Docker 守护进程;容器内的代理变量只有在容器创建之后才会作用于容器中的程序。
如果 Testcontainers 在拉取镜像时失败,尚未创建的容器上的 withEnv 设置帮不上忙。这次从仓库下载是由 Docker 守护进程在容器存在之前执行的。
| 失败的操作 | 需要检查的代理配置 |
|---|---|
| 镜像拉取 | 测试所使用的 Docker 守护进程及其 仓库路由 |
| 在运行中的容器内部下载 | 该容器中应用所支持的输入 |
| Java 测试连接 Docker 或应用 | 发起该连接的 Java 客户端 |
对于第二种情况,请把环境变量加到现有的 GenericContainer 定义上:
container
.withEnv("http_proxy", "http://proxy.example:8080")
.withEnv("https_proxy", "http://proxy.example:8080");如果允许容器内部下载使用公共 HTTP 端点,请从 HTTP 代理列表 填充这些值。镜像中的程序必须读取这些变量。它们不会把任意数据库套接字变成 HTTP 代理流量。端点还必须能从容器内访问:其 127.0.0.1 指的是容器自身。
对于第一种情况,请找出 Testcontainers 实际使用的 Docker 环境。远程守护进程或 Docker Desktop 可能从与本地 dockerd 不同的来源读取配置。在添加宽泛的代理默认值时,请让本地测试服务和 Docker API 保持在其预期路径上。