Перенос программы, написанной на python на docker (ubuntu)
Здравствуйте я совсем недвано начал изучать Docker и у меня возникла проблема. Есть программа она довольно большая. Из https://hub.docker.com/_/python/ я узнал общую структуру запуска файлов в python
FROM python:3.7
WORKDIR /usr/src/app/parsers/parsers
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./main.py" ]
Я чуть переделал его и docker build отработал хорошо, но при этом в файле, который я хочу запустить используется класс, который был описан в другом файле т.е.
from parsers.common.rabbit import *
from parsers.common.constants import *
и при запуске docker run у меня выбивает ошибку потому что он не видит папки parsers.common... Как нужно добавить туда папку parsers, чтобы он наконец увидел эти функции (P.S. знаю, что вопрос, наверное, очевидный, но найти в google я его не смог поэтому если вы нашли ответ на этот вопрос буду благодарен за ссылку)
Ответы (1 шт):
WORKDIR /usr/src/app/parsers/parsers
Можно упростить WORKDIR /usr/src/app.
Иначе абсолютный путь для parsers - /usr/src/app/parsers/parsers/parsers.
COPY . .
Проверить .dockerignore, что папки реально попали в docker образ.
docker run --rm -it image bash # (or on alpine sh)
Таким образом получаем shell можно дебажить.
Очень помогает на этапе написания / тестирования образа.
from parsers.common.rabbit import *
Проверить наличие __init__.py в папках модулей, возможно не попадают в образ.
Примеры использования .dockerignore:
*
!*.py
!core/*.py
!*.txt
!wait-for
!*.ini
!alembic/*
__pycache__
Использую тактику белых списков. Сначала запрещаю все, а затем c ! разрешаю нужное. Можно использовать, когда проект мал или очень много файлов, которые не будут использоваться в работе.
Или обычные черные списки
*.env
*.md
*.yml