gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:09:25 25 4
gpt4 key购买 nike

我是 Docker 的新手,我正在尝试在容器中运行我的 python 程序。

我的程序需要通过套接字连接到服务器才能正常工作。我已经创建了我的程序的 docker 镜像及其各自的容器,但是当它到达下一行时它失败了,我不知道为什么。

 sock.connect((host, port)) 

它显示了这个错误信息:

[Errno -2] Name or service not known

它在容器外运行得很好。我可能遗漏了一些非常明显的东西,但我看不到。

提前致谢。

最佳答案

除非您已在 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()

关于python - 如何使用 Docker 容器内的 python 套接字连接到服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com