【问题标题】:flask with docker returning 404 on all routes except root带有 docker 的烧瓶在除 root 之外的所有路由上返回 404
【发布时间】:2018-11-21 04:49:21
【问题描述】:

我一直在调查相关问题,但找不到解决此问题的正确方法。我所有的路线都在本地工作。但是,当我运行 docker-compose up 来容器化我的应用程序时,我的应用程序将启动,但除根“hello world”路由之外的所有路由都返回 404 错误。

我尝试在app.config 中设置“SERVER_NAME”,并像其他帖子建议的那样在我的路由 URL 上附加一个额外的“/”,但无济于事。

关于如何解决此问题的任何建议?

app/app.py

@app.route("/")                        # <-- this route works
def hello_world():
    return "Hello, world!"

@app.route("/test", methods=["POST"])  # <-- this one doesn't
def test():
    return "Test POST route"

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

Dockerfile:

FROM tiangolo/uwsgi-nginx-flask:python3.6

COPY requirements.txt /

WORKDIR /

RUN pip install -r ./requirements.txt --no-cache-dir

COPY app/ /app/

WORKDIR /app

ENV FLASK_APP=app.py
ENV FLASK_ENV=production
CMD flask db upgrade && python app.py

docker-compose.yml

version: '3'
services:
web:
  build: .
  ports:
    - "5000:5000"
env_file:
 - .env

【问题讨论】:

  • 我注意到你有一个额外的“。”在主机。应该是host="0.0.0.0",不确定这是否会导致任何问题。
  • 已编辑。这是一个错字,但它不能解决错误。
  • 您是如何验证 /test 路由不起作用的?能否提供 Docker 日志?
  • 确保您发送 POST 请求以验证您的 /test 路由是否有效。

标签: python python-3.x docker flask docker-compose


【解决方案1】:

需要在docker compose而不是dockerfile中挂载源代码文件夹,否则每次代码更改都需要重新构建镜像。在 docker compose 中,您可以使用 volumes 属性来执行此操作。你可以在这里阅读更多内容https://docs.docker.com/compose/compose-file/

例子


version: '3'
services:
web:
  build: .
  ports:
    - "5000:5000"
env_file:
 - .env
volumes:
 - ./app:/app

【讨论】:

  • 挂载源码并不能解决问题,完全不相关。
  • 如果镜像是在代码只有hello world的时候构建的,那么docker只会对此做出响应,并且代码的所有其他进一步的更改都不会反映在镜像中。跨度>
  • 没想到,但有可能。
猜你喜欢
  • 2018-08-20
  • 2014-07-31
  • 2018-07-05
  • 2019-10-28
  • 2020-08-26
  • 2021-01-15
  • 2018-05-12
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多