无法打开文件“/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 在此输入图片描述
需要进行一些更改。
您的
docker-compose.yml
文件中的 cli 命令需要是:
command: python /usr/src/app/manage.py run -h 0.0.0.0 -p 8000
命令名称是
run
而不是 runserver
。此外,要绑定的 host
ip 和要侦听的 port
ip 配置为不同的命令选项。
此外,为服务配置的端口映射需要从命令映射到容器端口:
ports:
- 5000:8000
在您的
manage.py
模块中,应提供 FlaskGroup
选项,该选项是工厂而不是应用程序实例。
您可以将其实现为 lambda 函数。create_app
编辑源文件未安装在容器卷中,这就是为什么您收到“没有这样的文件
cli = FlaskGroup(create_app=(lambda:app))
”的信息。
您需要将源文件挂载到manage.py
下的容器卷中。
/usr/src/app
volumes:
- './web:/usr/src/app'