从Docker运行改为Docker-compose; 关于集装箱间networking通信的不可预知的行为

经过两天的摸索,我决定向公众介绍我的问题。

我们使用Docker来设置我们的testing环境。 我们正在testing一个Java-Client-Server-Application。 在过去,应用程序只是为了在“单站点”configuration(1台服务器和x个客户端)中运行。 现在我们将应用程序升级到“多站点”configuration(x服务器和y客户端)。

出于这个原因,我们从Docker运行改为Docker-compose,以便轻松构build“复杂”networking。

用Docker运行我们没有遇到任何问题。

通过Docker-compose,我们可以像我们希望的那样build立一个networking(例如,4台服务器和2台客户机)。 我们也可以通过SSH和VNC访问每个容器,并且能够在自己的networking内的每个容器之间进行ping。

问题:我们的Java客户端无法连接到那里的服务器。 即使他们在同一个networking。

而现在真正令人沮丧的是:
也许5个客户端中的1个能够连接到他的服务器。 直到现在,我将它称为一个完整的随机行为。 它并不总是第五个容器工作或相同的networkingconfiguration。 此外,1-Server-1-Client-Network不能始终工作。 最后一个可能在第五次尝试之后。

首先,我认为我也必须公开RMI端口,但是这不起作用。 后来我打开所有的港口,只是肯定,但也没有工作。 关于Docker-Docs,也没有必要这样做。 此外,它也不能解释它有时会起作用的行为。 我的问题是,我没有设置原来的Docker-Run-Configuration,也许我错过了这里的一些重要部分。

也许你的某个人可以指引我正确的方向。

问候,凯

多站点配置的示例图片

自动创build的yaml-File的代码:

version: '2.1' services: foo_server_1: image: foo_server:latest mem_limit: 1g memswap_limit: 2g container_name: foo_server_1 ports: - "22" - "4567" networks: - foo_server_network - client_net_1 foo_client_1_1: image: foo_client:latest mem_limit: 1g memswap_limit: 2g links: - foo_server_1:server container_name: foo_client_1_1 ports: - "22" - "5900" - "4567" networks: - client_net_1 foo_client_1_2: image: foo_client:latest mem_limit: 1g memswap_limit: 2g links: - foo_server_1:server container_name: foo_client_1_2 ports: - "22" - "5900" - "4567" networks: - client_net_1 foo_server_2: image: foo_server:latest mem_limit: 1g memswap_limit: 2g container_name: foo_server_2 ports: - "22" - "4567" networks: - foo_server_network - client_net_2 foo_client_2_1: image: foo_client:latest mem_limit: 1g memswap_limit: 2g links: - foo_server_2:server container_name: foo_client_2_1 ports: - "22" - "5900" - "4567" networks: - client_net_2 foo_client_2_2: image: foo_client:latest mem_limit: 1g memswap_limit: 2g links: - foo_server_2:server container_name: foo_client_2_2 ports: - "22" - "5900" - "4567" networks: - client_net_2 networks: foo_server_network: client_net_1: client_net_2: 

docker ps -a的Powershell-Output:

 D:\dockerTemp> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e29f75524e11 foo_client:latest "/scripts/start.sh" 6 minutes ago Up 6 minutes 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33498->22/tcp, 0.0.0.0:33497->4567/tcp, 0.0.0.0:33496->5900/tcp foo_client_1_1 fb1b4169fff4 foo_client:latest "/scripts/start.sh" 6 minutes ago Up 6 minutes 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33501->22/tcp, 0.0.0.0:33500->4567/tcp, 0.0.0.0:33499->5900/tcp foo_client_1_2 cb6af51a0ffb foo_client:latest "/scripts/start.sh" 6 minutes ago Up 6 minutes 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33495->22/tcp, 0.0.0.0:33494->4567/tcp, 0.0.0.0:33493->5900/tcp foo_client_2_1 6f436f5b3d7c foo_client:latest "/scripts/start.sh" 6 minutes ago Up 6 minutes 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33492->22/tcp, 0.0.0.0:33491->4567/tcp, 0.0.0.0:33490->5900/tcp foo_client_2_2 3844553d31a4 foo_server:latest "/scripts/foo_server" 6 minutes ago Up 6 minutes 0/tcp, 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33489->22/tcp, 0.0.0.0:33487->4567/tcp foo_server_2 92bcd4273e34 foo_server:latest "/scripts/foo_server" 6 minutes ago Up 6 minutes 0/tcp, 5901/tcp, 6901/tcp, 12345/tcp, 0.0.0.0:33488->22/tcp, 0.0.0.0:33486->4567/tcp foo_server_1