测试容器:在测试容器中构建 docker 图像

Testcontainers: build docker image inside testcontainer

我正在使用 testcontainers 为我的 CI/CD 服务创建一些测试。

其中一个测试包含 docker 在测试容器内构建图像。它失败,因为它无法访问 docker 守护程序。

问题是如何以最简单的方式将本地 docker 守护程序共享到测试容器或如何 运行 docker 测试容器内部的守护进程?

所以,最后我通过 运行 docker-dind 图像作为附加容器解决了这个问题

@Slf4j
@NoArgsConstructor
public class DockerContainer {
    public static final String HOST = "test.docker.env";
    private static GenericContainer<?> container;

    public static void init() {
        container = new GenericContainer<>(DockerImageName.parse("docker:20.10.14-dind"))
                .withNetworkAliases(HOST)
                .withNetwork(SHARED)
                .withExposedPorts(2375)
                .withEnv("DOCKER_TLS_CERTDIR", "")
                .withPrivilegedMode(true)
                .withLogConsumer(new Slf4jLogConsumer(log));
    }

    public static GenericContainer<?> getInstance() {
        if (container == null) {
            init();
        }
        return container;
    }
}

并将 docker 主机添加到我的 CI 容器中:

this.container.dependsOn(DockerContainer.getInstance());
this.container.addEnv("DOCKER_HOST", String.format("tcp://%s:2375", DockerContainer.HOST));

现在效果很好