测试容器:在测试容器中构建 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));
现在效果很好
我正在使用 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));
现在效果很好