我如何使用Docker容器内的python套接字连接到服务器?

我是新来的Docker,我想在一个容器中运行我的Python程序。

我的程序需要通过套接字连接到服务器才能正常工作。 我已经创build了我的程序的泊坞窗图像及其相应的容器,但是当它到达下面的行时就失败了,我不知道为什么。

sock.connect((host, port)) 

它显示了这个错误消息:

[Errno -2]姓名或服务未知

它在遏制者之外运行得很好。 我可能错过了一些非常明显的东西,但是我看不见它。

提前致谢。

除非你在Docker容器的/etc/hosts文件中设置了它,否则你不太可能有正确的主机名设置。

幸运的是,Docker提供了一个很好的方式来显示两个容器之间的这种信息 – 环境variables。 链接两个容器时它们会自动暴露。

在一个terminal:

 $ docker run --name camelot -it -p 5000 --rm python Python 3.5.2 (default, Jul 8 2016, 19:17:03) [GCC 4.9.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import socketserver >>> >>> class MyHandler(socketserver.BaseRequestHandler): ... def handle(self): ... self.data = self.request.recv(2048).strip() ... print('{} wrote: '.format(self.client_address[0])) ... print(self.data) ... self.request.sendall(self.data.upper()) ... >>> >>> server = socketserver.TCPServer(('0.0.0.0', 5000), MyHandler) >>> server.serve_forever() 

在第二个:

 $ docker run --rm -it --link camelot python Python 3.5.2 (default, Jul 8 2016, 19:17:03) [GCC 4.9.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> import socket >>> >>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> s.connect((os.environ['CAMELOT_PORT_5000_TCP_ADDR'], ... int(os.environ['CAMELOT_PORT_5000_TCP_PORT']))) >>> s.send(b'Hey dude!') 9 >>> print(s.recv(2048)) b'HEY DUDE!' >>> s.close()