У меня есть сервер и клиентский 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)
Чтобы избежать потенциальных ошибок, я просто запускаю 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, а не в моем коде. Любое предложение будет оценено.