Docker-compose не может найти файл конфигурации Flask - PullRequest
0 голосов
/ 29 января 2019

Я следил за этим сообщением в блоге от Pycharm и пытался докернизировать мое приложение Flask.Мое приложение работает правильно на локальном Venv.Но когда я использую docker-compose up в терминале.Я получаю эту ошибку:

FileNotFoundError: [Errno 2] Невозможно загрузить файл конфигурации (нет такого файла или каталога): '/CarrotApp/project/instance/flask.cfg'

Снимок экрана

Я скопировал файлы, связанные с докером, из сообщения в блоге, внес только минимальные изменения:

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

Мое приложениеstructrue:

  • проект
    • / app (созданный Dockerfile)
    • / instance
      • flask.cfg
    • / venv
    • __init__.py
  • run.py
  • needs.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 и понятия не имею, где произошла ошибка.

Редактировать: Изменен файл yml в соответствии с ответом @andre_vieira.Добавлен скриншот полного сообщения об ошибке

1 Ответ

0 голосов
/ 29 января 2019

Вы говорите, что файл Docker находится в папке приложения с этой строкой:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...