我关注了this blog post from Pycharm,并尝试对我的Flask应用进行docker化。我的应用程序可以在本地venv上正常运行。但是当我在终端中使用docker-compose up
时。我收到此错误:
FileNotFoundError:[错误2]无法加载配置文件(无此类文件或目录):'/CarrotApp/project/instance/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
docker-compose.yml
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
docker-compose.dev.yml
version: '2'
services:
web:
volumes:
- .:/app
我的应用程序结构:
- 项目
- / app(由Dockerfile创建)
- /实例
flask.cfg
- / venv
__init__.py
run.py
- requirements.txt
Dockerfile
和yml
文件
run.py
:
from project import app
if __name__ == "__main__":
app.run(host='0.0.0.0')
我的__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文件。添加了完整错误消息的屏幕截图
答案 0 :(得分:3)
您是说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')
EDIT2:
要仅传递所需文件,请仅复制该文件:
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