【问题标题】:http://localhost/5000 not working in docker flaskhttp://localhost/5000 在 docker 烧瓶中不起作用
【发布时间】:2021-05-07 06:34:49
【问题描述】:

无法打开文件'/web/manage.py':[Errno 2] 没有这样的文件或目录 以代码 2 退出

注意:已尝试发布的所有类似问题解决方案,但均无效。

无论我做什么,都无法让 http://localhost/5000 工作。即使上述错误通过从 docker-container 中删除卷和命令而消失。

下面是docker-compose.yml


services:
  web:
    build: ./web
    command: python /web/manage.py runserver 0.0.0.0:8000
    volumes:
      - './users:/usr/src/app'
 
    ports:
      - 5000:5000 
    env_file:
      - ./.env.dev 

以下是 Dockerfile:

# pull official base image
FROM python:3.9.5-slim-buster

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

下面是 manage.py:

from flask.cli import FlaskGroup
from project import app
cli = FlaskGroup(app)
if __name__ == "__main__":
    cli()

下面是 init.py:

from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
    return jsonify(hello="world")

结构如下:

当我运行这个命令时,出现了红色标记的那些:docker-compose build enter image description here

【问题讨论】:

  • 您不需要在 dockerfile 中公开端口,例如 EXPOSE 5000。我也有点困惑8000这个端口你的服务器不是运行在8000上而不是5000上吗?
  • 是http://localhost:5000/,而不是http://localhost/5000(等于http://localhost:80/5000)。

标签: python postgresql docker flask flask-sqlalchemy


【解决方案1】:

要做一些改变。

docker-compose.yml 文件中的 cli 命令需要是:

    command: python /usr/src/app/manage.py run -h 0.0.0.0 -p 8000

命令名称是run 而不是runserver。此外,host ip to bind 和 port to listen 被配置为不同的命令选项。

另外为服务配置的端口映射需要从命令映射到容器端口:

    ports:
      - 5000:8000 

在你的manage.py 模块中,FlaskGroup 应该提供create_app 选项,它是工厂而不是应用程序实例。 您可以将其实现为 lambda 函数。

cli = FlaskGroup(create_app=(lambda:app))

编辑

源文件未安装在容器卷中,这导致您收到“没有这样的文件 manage.py”。

您需要将源文件挂载到/usr/src/app下的容器卷中。

volumes:
  - './web:/usr/src/app' 

【讨论】:

  • command: python /usr/src/app/manage.py run -h 0.0.0.0 -p 5000 我最初确实尝试过,我实际上希望端口为 5000,它仍然无法正常工作尝试了不同的步骤。命令:python /usr/src/app/manage.py run -h 0.0.0.0 -p 5000 cli = FlaskGroup(create_app=(lambda:app)) 端口:- 5000:5000 现在更改了这些并检查了localhost:5000,仍然得到错误 no such file manage.py 并且链接不运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2021-08-31
  • 2016-12-23
  • 2018-02-18
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多