如何在不同的主机上运行测试容器

Posted

技术标签:

【中文标题】如何在不同的主机上运行测试容器【英文标题】:How to run Testcontainers on a different host 【发布时间】:2020-09-29 13:42:37 【问题描述】:

当启动许多测试容器时,我的 16GB MBP 变得非常慢。我想在运行 Windows 的强大桌面上运行它们。如果这在我的本地网络之外工作,那就更好了。

【问题讨论】:

【参考方案1】:

首先,在两台机器上安装 ***(例如 Tailscale)。您需要这样做,因为 Testcontainers 使用的是随机端口,因此您不能只重定向您使用的端口,而是需要能够完全访问接口上所有可能的端口。

客户

然后在使用 Testcontainers 调用测试的客户端上,编辑一些文件。

在 ~/.docker-java.properties 或 C:/Users/myuser/.docker-java.properties:

DOCKER_HOST=tcp://DOCKER_HOST_***_IP:2375
DOCKER_TLS_VERIFY=0

在 ~/.testcontainers.properties 或 C:/Users/myuser/.testcontainers.properties:

docker.client.strategy=org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy

服务器

在运行 Docker 容器的机器上:

在 Docker 桌面的“设置 > 常规”中启用“公开守护程序”。

在 Windows 上:

在提升的命令提示符下运行以将数据包从 Tailscale IP 转发到本地 Docker: netsh interface portproxy add v4tov4 listenport=2375 connectaddress=127.0.0.1 connectport=2375 listenaddress=<WINDOWS_***_IP> protocol=tcp

为专用网络禁用防火墙。

在 Linux 上:

使用IPTABLES 将通过端口 2375 传入的流量路由到 127.0.0.1:

iptables -t nat -A PREROUTING -p tcp --dport 2375 -j DNAT --to-destination 127.0.0.1:2375
iptables -t nat -A POSTROUTING -j MASQUERADE.

参考文献

[2]https://github.com/docker-java/docker-java/blob/master/docs/getting_started.md

[2]https://www.testcontainers.org/features/configuration/

【讨论】:

【参考方案2】:

根据 Michael 的回答,我创建了一个 Helm chart,用于在 Kubernetes 上安装使用 Tailscale 作为 *** 的 Docker 服务器。

【讨论】:

以上是关于如何在不同的主机上运行测试容器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 容器中运行 VS Code 的扩展开发主机来测试我的 vscode 扩展?

在不同主机上的 Docker 中运行 cron 的问题

在主机上具有进程ID的docker容器上映射应用程序的进程ID

如何使不同主机上的docker容器互相通信

如何从容器内部访问在主机上运行的数据库?

我们可以在多台机器(主机)上运行单个容器吗?