首页 > 解决方案 > 使用 Kubernetes 部署的 Flask:socket.gaierror: [Errno -2] Name or service not known

问题描述

我正试图用 Kubernetes 包住我的脑袋,所以我写了一个简单的应用程序。它在我的计算机上运行良好,但是在使用 Kubernetes 部署后,该应用程序无法启动。这是代码的样子:

import uuid

import flask
from flask import Flask

hostname = str(uuid.uuid4())
app = Flask(__name__)


@app.route('/index')
@app.route('/')
def hello_world():
    return flask.render_template('index.html', hostname=hostname)


if __name__ == '__main__':
    app.run(host='0.0.0.0:5000')

使用 docker 部署应用程序:

FROM python:3.9.0a5-buster

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

但是我不断收到以下错误:

kubectl logs flask-debugger-696c587755-d64rg
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "/app/app.py", line 17, in <module>
    app.run(host='0.0.0.0:5000')
  File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 990, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 1052, in run_simple
    inner()
  File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 996, in inner
    srv = make_server(
  File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 847, in make_server
    return ThreadedWSGIServer(
  File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 740, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "/usr/local/lib/python3.9/socketserver.py", line 452, in __init__
    self.server_bind()
  File "/usr/local/lib/python3.9/http/server.py", line 138, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/local/lib/python3.9/socketserver.py", line 466, in server_bind
    self.socket.bind(self.server_address)
socket.gaierror: [Errno -2] Name or service not known

问题是什么?

标签: pythonflaskkubernetes

解决方案


import uuid

import flask
from flask import Flask

hostname = str(uuid.uuid4())
app = Flask(__name__)


@app.route('/index')
@app.route('/')
def hello_world():
    return flask.render_template('index.html', hostname=hostname)


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000)

@iain-shelvington 是对的。它的端口参数问题。


推荐阅读