簡體   English   中英

將應用程序 docker 化后無法訪問 flask 端點

[英]Unable to access flask endpoints after dockerizing the app

我正在開發一個已注冊 url 列表的 flask 應用程序。 我能夠在本地運行 flask 應用程序並訪問為其注冊的 url。

但是,當我將應用程序 dockerize 並使用docker-compose運行它時,我無法訪問該應用程序的網址。

在本地運行應用程序時,如果我訪問應用程序的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}."})

docker-compose.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的 Output:

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

wsgi.py文件中包含代碼似乎有些問題。 wsgi.py文件中刪除應用程序創建代碼並粘貼到app文件夾中的__init__.py文件中,並從那里導入 function。

現在一切都按預期工作。

暫無
暫無

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

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