如何从 Docker 容器内部测试外部服务?

How to test external services from inside a Docker container?

我们最近将系统切换到 Docker。这涉及许多容器 - 一个用于应用程序,一个用于 mysql,等等。但是,我现在遇到了一个我在开始之前没有考虑过的问题:)

我们有许多系统级集成测试,旨在测试与外部服务的交互。执行诸如停止 redis、发出请求、检查系统是否正确响应、然后重新启动 redis 并确保其正确重新连接等操作。以前,这很简单-

subprocess.call('service redis stop')

例如。但是现在......带有我们 python 代码的应用程序容器无法控制 redis 所在的外部服务器。有没有人对调整现有测试以在新环境中正常工作的最佳方式有任何想法?

您可以 运行 主机上的测试并使用 docker 命令启动和停止包含您想要 enable/disable 的服务的容器。

如果你想花点时间,你可以创建一个容器,在里面安装 docker unix 套接字,这样你就可以在主机上与 docker 通信。不过,这实际上是在主机上授予对该容器的 root 访问权限,所以如果你走这条路要小心。