在Docker容器上运行自主开发的Python服务器

我有这个python服务器:

import SocketServer class TCPHandler(SocketServer.BaseRequestHandler): def handle(self): print 'client is connected' data = self.request.recv(1024) print data self.request.sendall('Message received!') HOST, PORT = '0.0.0.0', 5004 server = SocketServer.TCPServer((HOST, PORT), TCPHandler) print 'Listening on port {}'.format(PORT) server.serve_forever() 

和这个客户:

 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('192.168.56.101', 5004)) s.sendall('Hello my name is John') response = s.recv(1024) print 'Response: {}'.format(response) 

我的操作系统是macOS,我使用VirtualBox在虚拟机上安装了Ubuntu 14.04。 在VirtualBox中,我设置了一个NATnetworking,并且给了Ubuntu这个IP地址: 192.168.56.101 。 我把服务器程序在Ubuntu上,并在IPTables中添加了一个规则,允许从端口5004传入连接。我在Ubuntu上启动了服务器,并尝试使用上面的客户端在我的macOS上连接到服务器。 连接完成,数据交换成功完成。

现在的问题。 我在我的虚拟Ubuntu上安装了Docker。 Docker本身使用另一个版本的Ubuntu 14.04。 我想要的是在Dockriz的Ubuntu版本中运行服务器,所以我写了这个Dockerfile:

 FROM bamos/ubuntu-opencv-dlib-torch:ubuntu_14.04-opencv_2.4.11-dlib_19.0-torch_2016.07.12 ADD . /root EXPOSE 5004 CMD ["python2", "/root/server.py"] 

我使用这个命令来构build它: sudo docker build -t boring91/mock并且它被成功地构build了。 我用这个命令运行了Docker容器: sudo docker run -p 5004:5004 -t boring91/mock ,它显示它开始在端口5004上侦听。当我试图用我的客户端连接到我的macOS时,socket连接但没有数据交换发生。 当我在虚拟化的Ubuntu上运行客户端时,也会发生同样的事情。 任何时候都可以告诉我这是什么问题?