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

问题描述 投票:0回答:1

[我有一个服务器和一个客户端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配置而不是我的代码。任何建议将不胜感激。

python python-3.x docker sockets
1个回答
0
投票

我用this算出

© www.soinside.com 2019 - 2024. All rights reserved.