Я работаю над проектом Python, и мне нужно создать образ докера для тестирования. В моем проекте у меня есть файл main.py
с оператором
from <module> import *
. здесь представлена папка, в которую я поместил все остальные файлы моего проекта.
Докер-файл выглядит следующим образом:
FROM continuumio/miniconda3
COPY parcellation_env.yml .
RUN conda env create -f parcellation_env.yml
SHELL ["conda", "run", "-n", "parcellation_env", "/bin/bash", "-c"]
COPY main.py .
ADD module/ .
ENTRYPOINT ["conda", "run", "-n", "parcellation_env", "python", "main.py", "-C", "white_matter_parcellation/config/config_point_autoencoder.yaml", "--use_splits", "-y"]
При создании образа все работает нормально, но когда я пытаюсь запустить образ в контейнере, получаю ошибку «Нет модуля с именем «модуль», сигнализирующую, что что-то пошло не так.
Я новичок в докере и использую его впервые. Кто-нибудь знает, что пошло не так?
Примечание: ошибка возникает, если я добавляю ADD и COPY для модуля/, я уже пробовал это изменить.
Обновлено:
Структура папок моего проекта в настоящее время следующая
|--main.py
|--module
|--parcellation_env.yml
|--__init__.py
|----folder1
|------folder_1_files
|------folder_1_init
|----folder2
|------folder_2_files
|------folder_3...
|------folder_2_init
...
🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.
Есть несколько проблем, которые я мог бы увидеть в идеале: если у вас возникают ошибки модуля, это обычно указывает на то, что Python не может найти конкретный модуль, о котором идет речь.
Я думаю, что лучше всего реструктурировать способ размещения файлов через файл Docker для использования Python.
Я внес несколько изменений и надеюсь, что это поможет, если я подозреваю, что у меня нет WORKDIR
.
Убедитесь, что ваша структура такая
├── Dockerfile
├── main.py
├── module or src/
│ ├── __init__.py
│ ├── files.py
├── parcellation_env.yml
вот фрагмент вашего файла Docker с несколькими модами.
FROM continuumio/miniconda3
# Copy the environment file and create the conda environment
COPY parcellation_env.yml .
RUN conda env create -f parcellation_env.yml
# Set the shell to use the conda environment
SHELL ["conda", "run", "-n", "parcellation_env", "/bin/bash", "-c"]
# Your working directory should include src/*/*/ etc. tests and the likes
WORKDIR /app
# copy the main script and the module directory to /app
COPY main.py /app/
ADD module/ /app/module/
ENV PYTHONPATH=/app
ENTRYPOINT ["conda", "run", "-n", "parcellation_env", "python", "main.py", "-C", "white_matter_parcellation/config/config_point_autoencoder.yaml", "--use_splits", "-y"]