gpt4 book ai didi

python - Docker 容器无法连接到本地主机上运行的服务器

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:18 25 4
gpt4 key购买 nike

我有一个运行服务器的 python 文件:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import json

class S(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()

def do_GET(self):
self._set_headers()
with open('files.json') as myfile:
self.wfile.write(myfile.read())

....

def run(server_class=HTTPServer, handler_class=S, port=8080):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print 'Starting httpd...'
httpd.serve_forever()

另一个执行 get 请求: 导入请求

SESSION = requests.Session()
SESSION.trust_env = False

url = "http://localhost:8080"
response = SESSION.get(url)
data = response.json()

当我正常运行这两个时,这工作正常。但是,当我将应用程序(而不是服务器)容器化时,请求会向我抛出此错误:

raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7ec03e5ed0>: Failed to establish a new connection: [Errno 111] Connection refused',))

我认为这是因为 docker 以某种方式阻止我连接到 localhost:8080 上的服务器?

谢谢你的帮助☺

最佳答案

容器是一个隔离的环境。它是保护主机操作系统运行进程的“ jail ”。将容器视为具有自己的 IP 地址的虚拟机。 localhost 将是尝试连接到自身的容器。

我猜您可以使用主机的公共(public) IP 地址联系主机上的端口 8080。

在 docker 中运行服务器会更有意义。然后,您可以将服务器容器中的端口映射到主机上的端口。然后您的客户端就会按预期工作。

容器与主机操作系统交互的两种最常见的方式是:

  • 将网络端口从容器映射到主机时
  • 将文件作为卷从主机映射到容器时

出于充分的原因,它具有相当的限制性。

关于python - Docker 容器无法连接到本地主机上运行的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45171069/

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