簡體   English   中英

如何使用Docker容器內的python套接字連接到服務器?

[英]How can I connect to a server using python sockets inside a Docker container?

我是Docker的新手,正在嘗試在容器中運行python程序。

我的程序需要通過套接字連接到服務器才能正常工作。 我已經創建了程序的docker映像及其相應的容器,但是當它到達以下行時會失敗,並且我不知道為什么。

 sock.connect((host, port)) 

它顯示此錯誤消息:

[Errno -2]名稱或服務未知

它在容器外部運行良好。 我可能錯過了一些確實很明顯的東西,但我看不到。

提前致謝。

除非您在docker容器的/etc/hosts文件中進行了設置,否則不太可能具有正確的主機名設置。

幸運的是,Docker提供了一種在兩個容器之間(環境變量)公開這種信息的好方法。 當您鏈接兩個容器時,它們會自動顯示。

在一個終端中:

$ 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM