我关注了Py魅力上的这篇博客文章,并尝试对我的Flask应用程序进行dockerize。我的应用程序在本地venv上正确运行。但是当我在终端中使用docker-compose up
时。我收到这个错误:
FileNotFoundError:[Errno 2]无法加载配置文件(没有这样的文件或目录):'/CarrotApp/project/example/flask.cfg'
屏幕上显示程序运行的图片
我从博客文章中复制了docker相关的文件,只做了很少的修改:
Dockerfile:
FROM python:3.6
EXPOSE 5000
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
CMD python run.py
码头组合.yml
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
docker-compose.dev.yml
version: '2'
services:
web:
volumes:
- .:/app
我的应用程序结构:
flask.cfg
run.py
:
from project import app
if __name__ == "__main__":
app.run(host='0.0.0.0')
my __init__中的烧瓶配置。py
:
app = Flask(__name__, instance_relative_config=True,
instance_path='/CarrotApp/project/instance')
app.config.from_pyfile('flask.cfg')
我必须为实例使用绝对路径,因为 Flask 只允许这样做。
我是 Docker 的新手,不知道哪里出了问题。
编辑:根据@andre_vieira的回答更改了yml文件。添加了完整错误消息的屏幕截图
你是说你的docker文件在app文件夹里,这一行:
build: ./app
因此,将其更改为:
build: .
这将消除:
Cannot locate specified Dockerfile
编辑:关于找不到配置文件。
我无法理解你在尝试什么,因为,用这句话:
COPY . /app
您要将所有文件复制到应用程序文件夹。所以在容器内部的路径是这样的:
app/project/app/
app/project/instance
app/run
app/Dockerfile and yml files (any you don't need, and you don't want this files inside the container.
这就是你正在尝试的吗?
尝试“ssh”到容器内部,检查文件是否存在,并查看路径是否如您所愿。
因为你说你的应用程序和配置文件在/CarrotApp文件夹中。但您从未创建此文件夹。因此,尝试将init更改为:
app = Flask(__name__, instance_relative_config=True,
instance_path='/app/project/instance')
app.config.from_pyfile('flask.cfg')
编辑2:
要仅传递所需的文件,请仅复制该文件:
COPY project /app
COPY run.py /app
COPY requirements.txt /app
或者只是将所有这些文件放在一个名为“src”的文件夹或其他文件夹中,然后只复制那个文件夹:
COPY src /app
所以你的结构会是这样的:
yourproject/
src/
project
/app (created by Dockerfile)
/instance
flask.cfg
/venv
__init__.py
run.py
requirements.txt
Dockerfile and yml files