繁体   English   中英

使用简单的python tcp脚本连接同一台主机上的两个Docker容器,但出现连接被拒绝的错误

[英]Use a simple python tcp script to connect two Docker container on the same host machine but got Connection refused error

我有一个服务器和一个客户端 docker 容器在同一个 AWS EC2 上运行,我尝试让它们通过使用 Tcp 协议相互通信,但得到:

Traceback (most recent call last):
 File "testClient.py", line 13, in <module>
   s.connect((HOST, PORT))
ConnectionRefusedError: [Errno 111] Connection refused

这是我的服务器容器代码:

import socket
import sys

HOST, PORT = "localhost", int(sys.argv[2])
protocol = sys.argv[1]
print(protocol, HOST, PORT)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (HOST, PORT)
sock.bind(server_address)

sock.listen(1)
connection, client_address = sock.accept()
while True:
    data = connection.recv(20)
    if not data: break
    print('received data: ', data)
    connection.send(data.upper())
connection.close()

和客户端容器:

import socket
import sys

protocol = sys.argv[1]
HOST = sys.argv[2]
PORT = int(sys.argv[3])
print(protocol, HOST, PORT)

# HOST, PORT = "localhost", 9998
command = " ".join(sys.argv[4:])

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(command.encode('utf-8'))
data = s.recv(1024)
s.close()

print('received data: ', data)

为了避免潜在的错误,我只是使用交互式 shell 运行 docker,然后手动运行 python 代码:

docker run -it --rm --name node_server -p 4444:4444 server
/# python3 Server.py ts 4444
docker run --rm -it --name node_client -p 8888:8888 client
/# python3 Client.py ts 172.17.0.2 4444 put a 3

我放在客户端的 ip 地址来自docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' server

我在暴露服务器的端口上没有任何运气,所以我也尝试添加--link server来运行客户端容器和---network=test到两个容器,但它给了我同样的错误。

顺便说一句,我在主机上使用telnet 172.17.0.2 4444并且它也拒绝了我的连接。

我的其他同学在同一个环境下用java做同样的事情都没有出现任何连接问题。

我是 docker 新手,但从我的角度来看,我认为问题出在 Docker 配置而不是我的代码上。 任何建议将不胜感激。

我用这个弄明白了

只需更改服务器的主机 ip: HOST, PORT = ", 1234这样服务器套接字就不会受到太多限制而无法接收消息HOST = localhost将使来自其他网络的连接无法进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM