停靠应用程序后无法访问flask终结点

2024-04-18 04:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个flask应用程序,它有一个注册的url列表。我可以在本地运行flask应用程序并访问为它注册的url。你知道吗

但是当我将应用程序dockerize并使用docker-compose运行它时,我无法访问应用程序的url。你知道吗

在本地运行应用程序时,如果我访问应用程序的app.url_map,就可以看到该应用程序的所有已注册url的列表。(我创建了一个端点-/urls,它在命中时返回url_map列表)

但是在docker中运行应用程序后,当我尝试点击相同的端点/urls时,除了/urls端点(基本上就是它自己)之外,我看不到任何列表。你知道吗

我哪里出错了?你知道吗

以下是wsgi.py公司文件:

import os
from flask import Flask, jsonify
from app.workload.views import register_workload_urls

def load_urls(app):
    app_mode = os.getenv("APP_MODE")
    if app_mode == "WORKLOAD":
        register_workload_urls(app)

application = Flask(__name__)

@application.route('/urls')
def urls():
    return jsonify({"APP": str(os.getenv("APP_MODE")), "URLs registered": f"{str(application.url_map)}"})

if __name__ == "__main__":
    load_urls(application)
    application.run()

视图.py:

def register_workload_urls(application):
    @application.route('/api/workload/health/check/')
    def w_check():
        return jsonify({'status': f"Workload service is {app.config_pub.status}."})

    @application.route('/api/workload/health/up/')
    def w_up():
        app.config_pub.status = "UP"
        app.config_pub.dispatch("UP")
        return jsonify({'status': f"Workload service is {app.config_pub.status}."})

    @application.route('/api/workload/health/down/')
    def w_down():
        app.config_pub.status = "DOWN"
        app.config_pub.dispatch("DOWN")
        return jsonify({'status': f"Workload service is {app.config_pub.status}."})

码头工人-合成.yml:

  workload_service:
    container_name: workload_container
    restart: always
    image: workload
    build: 
      context: ./dsdp
      dockerfile: Dockerfile.app.local
    ports:
      - "5000:5000"
    environment:
        - PYTHONPATH=.
        - FLASK_APP=wsgi.py
        - FLASK_DEBUG=1
        - CONFIG_PATH=config/local
        - APP_MODE=WORKLOAD
    command: flask run --host=0.0.0.0 --port 5000

Dockerfile.app.local文件:

FROM python:3.7
RUN mkdir -p /var/www/dsdp/
WORKDIR /var/www/dsdp/
COPY . /var/www/dsdp/
RUN pip3 install --no-cache-dir -r requirements.txt
EXPOSE 5000

在docker中运行时/urls的输出:

{
  "APP": "WORKLOAD",
  "URLs registered": "Map([<Rule '/urls' (GET, HEAD, OPTIONS) -> urls>,\n <Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>])"
}

Tags: configapp应用程序urlflask列表applicationdef
1条回答
网友
1楼 · 发布于 2024-04-18 04:24:34

看起来代码在wsgi.py文件中有问题。从wsgi.py文件中删除应用程序创建代码,并粘贴到app文件夹中的__init__.py文件中,然后从那里导入函数。你知道吗

现在一切正常。你知道吗

相关问题 更多 >