Docker容器内XMLRPC客户端无法连接同网络服务端
问题解决:同一Docker网络中容器无法互相连接
1. 修复服务端监听地址问题
你的服务端代码中,XMLRPC服务绑定的是localhost(即127.0.0.1),这意味着服务只会监听容器内部的回环地址,同一Docker网络中的其他容器无法通过容器IP访问到这个服务。
修改服务端代码中的监听地址为0.0.0.0,这样服务会监听容器的所有网卡:
# 原代码 server = SimpleXMLRPCServer(("localhost", 8000)) # 修改后 server = SimpleXMLRPCServer(("0.0.0.0", 8000))
2. 修复客户端Dockerfile的复制错误
你提供的客户端Dockerfile中,错误地复制了server.py到容器中,导致客户端容器实际运行的是服务端代码,自然无法连接到真正的服务端。
修改客户端Dockerfile:
# 原代码 COPY src/server.py . # 修改后 COPY src/client.py .
3. (可选)使用容器名代替IP访问
同一自定义Docker网络中,容器可以通过容器名直接通信,无需硬编码IP地址,这样更灵活(IP可能随容器重启变化)。修改客户端代码中的服务地址:
# 原代码 server="http://172.18.0.2:8000/" # 修改后 server="http://python_server:8000/"
验证步骤
- 重新构建服务端和客户端镜像:
cd ~/test_networking/xmlrpcserver docker build . --tag python_server:v1.0 cd ~/test_networking/xmlrpcclient docker build . --tag python_client:v1.0 - 停止并删除原有容器:
docker stop python_server python_client docker rm python_server python_client - 重新启动容器:
docker run --net myNetwork --name python_server python_server:v1.0 docker run --net myNetwork --name python_client python_client:v1.0
此时客户端应该能正常连接到服务端并输出结果。
内容的提问来源于stack exchange,提问作者Layer8
相关产品推荐
相关产品推荐

