【发布时间】:2019-08-22 08:56:50
【问题描述】:
我正在尝试在 python 中开发一个简单的客户端/服务器应用程序。
客户端在 Docker 容器中运行,而服务器直接在主机上运行。
这是客户端的代码:
import socket
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8888))
print (Connected to server)
if __name__ == '__main__':
main()
这是服务器的代码:
import socket
HOST = '127.0.0.1'
PORT = 8888
print ("Serving on ", PORT)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
我有以下错误:
File "./main.py", line 5, in main
s.connect(('127.0.0.1', 8888))
ConnectionRefusedError: [Errno 111] Connection refused
如果我在容器外(直接在主机上)运行此客户端,我可以连接。但是当我在容器中运行它时出现此错误。
PS:它不是纯粹的 Docker 容器,而是 IoT Edge 模块
你知道是什么问题吗? 谢谢
【问题讨论】:
-
在服务器中,
HOST必须是特殊的“所有接口”地址 0.0.0.0,否则将无法从容器外部访问。在客户端,您需要将服务器的容器名称作为主机名,127.0.0.1 是“此容器”。两者都需要在同一个 Docker 网络上。
标签: python docker sockets client-server