Java 如何在testcontainers上从一个容器到另一个容器公开端口?

Java 如何在testcontainers上从一个容器到另一个容器公开端口?,java,docker,testcontainers,Java,Docker,Testcontainers,我想对docker环境上运行的几个服务进行集成测试。他们必须互相交谈,因为他们是联系在一起的。所以我需要以某种方式暴露彼此之间的端口。使用测试容器库可以进行此设置吗?我没有在上面找到码头 本地运行的测试应用程序,将连接到停靠的服务器: mysql 后端一 为了让后端更困难,一台服务器需要与mysql服务对话。 使用testcontainers可以做到这一点吗 通常,当需要容器之间的网络通信时,应在处创建网络,容器应共享该网络 通过使用docker compose,事情可以简化,默认情况下,它

我想对docker环境上运行的几个服务进行集成测试。他们必须互相交谈,因为他们是联系在一起的。所以我需要以某种方式暴露彼此之间的端口。使用测试容器库可以进行此设置吗?我没有在上面找到码头

本地运行的测试应用程序,将连接到停靠的服务器:

  • mysql
  • 后端一
为了让后端更困难,一台服务器需要与mysql服务对话。
使用testcontainers可以做到这一点吗

通常,当需要容器之间的网络通信时,应在处创建网络,容器应共享该网络

通过使用
docker compose
,事情可以简化,默认情况下,它会为
docker compose
文件中声明的所有服务创建一个网络。然后容器可以通过其服务名称进行通信

我从未使用过Testcontainers项目,但我在文档中看到了一个

从上面的url引用:

Testcontainers将启动一个小的“大使”容器,它将 组合托管容器和以下端口之间的代理 可访问到您的测试。这是使用一个单独的、最小的 作为TCP代理运行socat的容器


还有一个示例,您可以基于文档url。

通常,当需要容器之间的网络通信时,应在处创建网络,容器应共享该网络

通过使用
docker compose
,事情可以简化,默认情况下,它会为
docker compose
文件中声明的所有服务创建一个网络。然后容器可以通过其服务名称进行通信

我从未使用过Testcontainers项目,但我在文档中看到了一个

从上面的url引用:

Testcontainers将启动一个小的“大使”容器,它将 组合托管容器和以下端口之间的代理 可访问到您的测试。这是使用一个单独的、最小的 作为TCP代理运行socat的容器


还有一个例子,您可以基于文档url。

Testcontainers支持网络,有


您需要首先创建一个网络(通过
network.newNetwork()
),然后使用
with network
/
with networkalias
将容器“连接”到同一网络中。

Testcontainers支持网络,有


您需要首先创建一个网络(通过
network.newNetwork()
),然后使用
with network
/
with networkalias
将您的容器“连接”到同一网络中。

您能详细说明一下吗?您的意思是说您将在docker容器1中有一台服务器,在8888端口(例如)上运行,然后在container2中运行测试,该服务器将通过8888端口访问docker 1?您能详细说明吗?您是说您将在docker容器1中运行一个服务器,在8888端口(例如)上运行,然后在container2中运行测试,该服务器将通过8888端口访问docker 1?我希望得到比compose更简单的解决方案。但找不到有效的示例,其中将包含跨容器通信。我将尝试一个compose模块。Docker compose不太灵活,更难支持,我们建议改用通用容器。请参阅我关于如何实现所需功能的回答。我希望找到比编写更简单的解决方案。但找不到有效的示例,其中将包含跨容器通信。我将尝试一个compose模块。Docker compose不太灵活,更难支持,我们建议改用通用容器。请参阅我关于如何实现所需功能的回答OK。但这些容器将并行运行,对吗?但是我需要在db启动和运行之前阻止一个启动。这怎么可能呢?他们会按照你启动他们的方式运行。您可以对规则进行排序,您可以使用
.start()
而不使用规则-由您决定(与Docker Compose不同)。只需为容器编写代码:)好的。但这些容器将并行运行,对吗?但是我需要在db启动和运行之前阻止一个启动。这怎么可能呢?他们会按照你启动他们的方式运行。您可以对规则进行排序,您可以使用
.start()
而不使用规则-由您决定(与Docker Compose不同)。只需为容器编写代码:)