Вопрос или проблема
Я скачал образ docker anaconda с здесь и запускаю его на MacOS. Я столкнулся со следующей проблемой и очень был бы признателен за вашу помощь!
Когда я пытаюсь запустить Ipython с помощью следующей команды
docker run -it pyimg ipython
я получаю ошибку
docker: Ошибка ответа от демона: не удалось создать OCI runtime:
container_linux.go:345: запуск процесса контейнера вызвал “exec:
\”ipython\”: исполняемый файл не найден в $PATH”: неизвестно.
Это заставляет меня думать, что $PATH в docker не содержит местоположение ipython.
Однако, когда я запускаю контейнер, сначала выполняя bash, а затем запуская ipython, все работает отлично!
Более точно,
docker run -it pyimg bash
и затем
ipython
работает нормально..
Чтобы сделать дело еще более запутанным,
docker run -it pyimg python
работает идеально!
Я уже проверял внутри контейнера и понял, что и python, и ipython находятся в одной директории /opt/conda/bin
Как такое возможно и как я могу это исправить?
Большое спасибо заранее за вашу помощь!
Выполнение:
docker run -it pyimg ipython
предполагает, что у вас установлен iphython
на вашем хост ОС. То есть, на вашем MacOS, как вы указали. Если iphython
установлен, запустите его с параметром privileged
:
docker run -it --privileged pyimg ipython
Ответ или решение
Ошибка, с которой вы столкнулись, связана с тем, что Docker не может найти исполняемый файл ipython
в контейнере, когда вы его запускаете напрямую. Давайте разберем причины этого и возможные решения.
Основные причины ошибки
-
Проблема с переменной окружения $PATH:
Когда вы запускаете контейнер командойdocker run -it pyimg ipython
, Docker пытается выполнитьipython
прямо, и он ищет его в переменной окружения$PATH
. Еслиipython
не находится в указанных директориях переменной, вы получаете сообщение об ошибке "executable file not found in $PATH". -
Сравнение с запуском через bash:
В случае, если вы сначала запускаете контейнер с помощьюdocker run -it pyimg bash
, а затем выполняетеipython
, вы не сталкиваетесь с этой проблемой, поскольку оболочка bash инициализирует окружение, в том числе и переменные среды, которые могут включать правильный путь к исполняемым файлам. После входа в оболочку,ipython
доступен, и поэтому он запускается без ошибок. -
Разные способы запуска:
Также вы отметили, что запускdocker run -it pyimg python
работает без проблем. Это может быть связано с тем, что Python имеет более широкий путь поиска или непосредственно является ссылкой на интерпретатор, что может не применять кipython
.
Решения проблемы
Вот несколько способов, которыми вы можете устранить эту ошибку:
-
Явное указание пути к исполняемому файлу:
Попробуйте запуститьipython
, указав полный путь к исполняемому файлу:docker run -it pyimg /opt/conda/bin/ipython
-
Обновление переменной окружения PATH:
Вы можете запустить контейнер с измененнымPATH
, чтобы включить директорию, в которой находитсяipython
:docker run -it --env PATH="/opt/conda/bin:$PATH" pyimg ipython
-
Создание собственного Dockerfile:
Если вы планируете часто работать с этими образами, вы можете создать свой собственныйDockerfile
, который будет автоматически добавлять необходимые пути и зависимые файлы при сборке образа. Пример простого Dockerfile:FROM continuumio/anaconda ENV PATH="/opt/conda/bin:$PATH"
-
Запуск с использованием bash:
Как вы уже делали, вы можете всегда запускатьipython
через оболочку bash:docker run -it pyimg bash -c "ipython"
Заключение
Проблема, с которой вы столкнулись, является довольно распространенной и связана с настройками окружения внутри контейнеров Docker. Использование одного из предложенных решений поможет вам запустить ipython
без проблем.
Если у вас есть дополнительные вопросы или вам требуются дальнейшие уточнения, пожалуйста, дайте знать!