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

时间:2017-06-26 03:36:29

标签: python linux macos ubuntu docker

我有这个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中,我设置了一个NAT网络,我给了Ubuntu这个IP地址:192.168.56.101。我把服务器程序放在Ubuntu上并在IPTables中添加一条规则以允许来自端口5004的传入连接。我在Ubuntu上启动了服务器,我尝试使用上面的客户端在我的macOS上连接到服务器。连接完成,数据交换成功完成。

现在问题。我在我的虚拟化Ubuntu上安装了Docker。 Docker本身使用另一个版本的Ubuntu 14.04。我想要的是在Dockized版本的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"]

我使用此命令构建它:sudo docker build -t boring91/mock并且它已成功构建。我使用以下命令运行Docker容器:sudo docker run -p 5004:5004 -t boring91/mock它显示它已开始侦听端口5004.当我尝试使用我的macOS上的客户端连接到它时,套接字连接但没有发生数据交换。当我在虚拟化的Ubuntu上运行客户端时,会发生同样的事情。能不能告诉我这里的问题是什么?

0 个答案:

没有答案