Нет модуля с именем Ошибка при запуске образа докера

Я работаю над проектом 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 является интерпретируемым языком программирования.


1
72
1

Ответ:

Решено

Есть несколько проблем, которые я мог бы увидеть в идеале: если у вас возникают ошибки модуля, это обычно указывает на то, что 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"]