Java 从Docker run更改为Docker compose;关于集装箱间网络通信的不可预测行为
经过两天的努力,我决定向公众提出我的问题 我们使用Docker来设置测试环境。我们正在测试一个Java客户机-服务器应用程序。在过去,应用程序只是在“单站点”配置中运行(1台服务器和x台客户端)。现在,我们正在将应用程序升级为“多站点”配置(x台服务器和y台客户端) 因此,我们从Docker run改为Docker compose,以轻松构建“复杂”网络 使用Docker run,我们没有遇到任何问题 使用Docker compose,我们可以按照自己的意愿建立网络(例如,4台服务器,每个服务器最多2台客户端)。我们还能够通过SSH和VNC访问每个容器,并且能够在它们自己的网络中的每个容器之间进行ping 问题: 我们的Java客户端无法连接到这些服务器。即使他们在同一个网络中 现在是真正令人沮丧的部分:Java 从Docker run更改为Docker compose;关于集装箱间网络通信的不可预测行为,java,docker,network-programming,docker-compose,docker-machine,Java,Docker,Network Programming,Docker Compose,Docker Machine,经过两天的努力,我决定向公众提出我的问题 我们使用Docker来设置测试环境。我们正在测试一个Java客户机-服务器应用程序。在过去,应用程序只是在“单站点”配置中运行(1台服务器和x台客户端)。现在,我们正在将应用程序升级为“多站点”配置(x台服务器和y台客户端) 因此,我们从Docker run改为Docker compose,以轻松构建“复杂”网络 使用Docker run,我们没有遇到任何问题 使用Docker compose,我们可以按照自己的意愿建立网络(例如,4台服务器,每个服务器
可能五分之一的客户机能够连接到他的服务器。到目前为止,我称之为完全随机行为。它并不总是第五个容器可以工作,也不总是相同的网络配置。此外,1服务器1客户端网络并不总是有效。最后一次可能是在第五次尝试之后 首先,我认为我也必须公开RMI端口,但这不起作用。后来,我打开了所有端口,只是为了确定,但这也不起作用。关于Docker文档,也没有必要这样做。此外,它也不能解释它有时起作用的行为。我的问题还在于我没有设置最初的Docker运行配置,可能我错过了一些重要的部分 也许你们中的某个人能给我指出正确的方向 问候,, 凯 自动创建的yaml文件的代码:
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输出:
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
尽量让端口不被随机分配,比如
“4567:xxxx”
,我已经尝试过了。不工作:错误:对于foo_客户端,foo_2_1无法启动服务foo_客户端:{“消息”:“驱动程序未能在端点foo_客户端上编程外部连接(029da8b834cab75bee1725bea27193889597440beee9c04a00260cb6e0d05209):绑定0.0.0.0:1089失败:端口已分配”}我假设您收到此消息是因为您在某个地方映射了两次相同的端口,并且只能分配一次