0

我关注了 Pycharm 的这篇博文,并尝试对我的 Flask 应用程序进行 docker 化。我的应用程序在本地 venv 上正确运行。但是当我docker-compose up在终端中使用时。我收到此错误:

FileNotFoundError:[Errno 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

码头工人-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
  • 要求.txt
  • Dockerfileyml文件

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 文件。添加了完整错误消息的屏幕截图

4

1 回答 1

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')

编辑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
于 2019-01-29T10:07:21.740 回答