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

Я работаю над проектом 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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"]

Спасибо за ответ, попробовал и вроде теперь модуль захватывает. Проблема, скорее всего, в том, что в структуре внутри модуля есть еще какие-то подмодули (например, в папке модуля есть подпапка data со своими файлами и своим init). Являются ли команды ADD или COPY рекурсивными? Или есть способ указать, что они должны быть рекурсивными?

Neskelogth 28.08.2024 13:13

@Neskelogth, чтобы ответить на ваш вопрос, ADD - это больше, чем просто специалист по копированию папок, хотя COPY копирует только файлы, я думаю, если у вас есть что-нибудь в этой папке, он это скопирует. Но ADD делает больше, чем просто копирование папок, слово «рекурсивный» может не отражать то, что ADD делает теоретически, за исключением того, что вы хотите ограничить его (добавить) областью папок, тогда вы можете сказать, что ха-ха!. если у вас есть время, вот URL-адрес для добавления/копирования документов, это даст вам больше информации, чем я, о том, что они могут и чего не могут docs.docker.com/build/building/best-practices/#add- или - скопируйте

Derek Roberts 28.08.2024 14:07

PS: Пожалуйста, дайте мне знать, если это помогло...

Derek Roberts 28.08.2024 14:14

Итак, я попытался посмотреть, что вы там связали, но, к сожалению, это не помогло. В моем случае у меня есть структура папок как

Neskelogth 29.08.2024 10:26

@Neskelogth, ты имеешь в виду, что это не поможет тебе понять ДОБАВИТЬ/КОПИРОВАТЬ?

Derek Roberts 29.08.2024 10:30

Итак, я попытался посмотреть, что вы там связали, но, к сожалению, это не помогло. В моем случае структура папок такая же, как при редактировании исходного вопроса. И по какой-то причине докер не может получить доступ к этим внутренним папкам. Одна из папок содержит файлы конфигурации, которые используются в моем проекте Python для настройки пользователем некоторых частей скрипта. Когда я пытаюсь запустить код с помощью Docker, утверждение не выполняется, потому что

Neskelogth 29.08.2024 11:07

Python дает путь: модуль/config/config_file не существует. Отвечая на ваш вопрос, я их понял, но, к сожалению, чего-то все еще не хватает.

Neskelogth 29.08.2024 11:08

Насколько я хотел вам помочь, ваш первоначальный вопрос был: «Нет модуля с именем Ошибка при запуске образа докера», который, как вы сказали, работает: «Спасибо за ответ, я попробовал, и, похоже, теперь модуль захвачен». Я не знаю, допускает ли стек два вопроса, однако. Если вы перемещаете файлы в свое изображение, это может быть просто -> ADD root_source/ /app или ADD root_source/ ./ или вы даже можете написать скрипт Python, чтобы заархивировать все ваши файлы и разархивировать их с помощью ADD. . Вы задаете два вопроса в одном, я бы предложил закрыть этот вопрос и задать другой вопрос.

Derek Roberts 29.08.2024 11:49

когда вы откроете новый вопрос, укажите мне на него, я напишу для вас сценарий для архивирования, мы можем позаботиться об этом, пожалуйста, убедитесь, что вы предоставили минимально воспроизводимый код. однако если вы разобрались с этим, то все в порядке..

Derek Roberts 29.08.2024 12:46

Я только что разместил новый вопрос здесь, когда задаю вопрос. спасибо за помощь

Neskelogth 29.08.2024 12:52

круто посмотри на твои комментарии

Derek Roberts 29.08.2024 13:20

Другие вопросы по теме