докер: Ответ ошибки от демона: не удалось создать OCI runtime: container_linux.go:345

Вопрос или проблема

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

Основные причины ошибки

  1. Проблема с переменной окружения $PATH:
    Когда вы запускаете контейнер командой docker run -it pyimg ipython, Docker пытается выполнить ipython прямо, и он ищет его в переменной окружения $PATH. Если ipython не находится в указанных директориях переменной, вы получаете сообщение об ошибке "executable file not found in $PATH".

  2. Сравнение с запуском через bash:
    В случае, если вы сначала запускаете контейнер с помощью docker run -it pyimg bash, а затем выполняете ipython, вы не сталкиваетесь с этой проблемой, поскольку оболочка bash инициализирует окружение, в том числе и переменные среды, которые могут включать правильный путь к исполняемым файлам. После входа в оболочку, ipython доступен, и поэтому он запускается без ошибок.

  3. Разные способы запуска:
    Также вы отметили, что запуск docker run -it pyimg python работает без проблем. Это может быть связано с тем, что Python имеет более широкий путь поиска или непосредственно является ссылкой на интерпретатор, что может не применять к ipython.

Решения проблемы

Вот несколько способов, которыми вы можете устранить эту ошибку:

  1. Явное указание пути к исполняемому файлу:
    Попробуйте запустить ipython, указав полный путь к исполняемому файлу:

    docker run -it pyimg /opt/conda/bin/ipython
  2. Обновление переменной окружения PATH:
    Вы можете запустить контейнер с измененным PATH, чтобы включить директорию, в которой находится ipython:

    docker run -it --env PATH="/opt/conda/bin:$PATH" pyimg ipython
  3. Создание собственного Dockerfile:
    Если вы планируете часто работать с этими образами, вы можете создать свой собственный Dockerfile, который будет автоматически добавлять необходимые пути и зависимые файлы при сборке образа. Пример простого Dockerfile:

    FROM continuumio/anaconda
    ENV PATH="/opt/conda/bin:$PATH"
  4. Запуск с использованием bash:
    Как вы уже делали, вы можете всегда запускать ipython через оболочку bash:

    docker run -it pyimg bash -c "ipython"

Заключение

Проблема, с которой вы столкнулись, является довольно распространенной и связана с настройками окружения внутри контейнеров Docker. Использование одного из предложенных решений поможет вам запустить ipython без проблем.

Если у вас есть дополнительные вопросы или вам требуются дальнейшие уточнения, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...