提问者:小点点

Docker-compose找不到烧瓶配置文件


我关注了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

我的应用程序结构:

  • 项目
    • /app(由Dockerfile创建)
    • /实例
      • 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文件。添加了完整错误消息的屏幕截图


共1个答案

匿名用户

你是说你的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