Python 3.6 в контейнере Docker не запускается, просто падает - PullRequest
0 голосов
/ 17 декабря 2018

Я знаю, что этот заголовок может быть немного запутанным, поэтому для пояснения: контейнер докера запускается просто отлично.Python продолжает падать, когда я пытаюсь открыть его.

Мой компьютер работает на Ubunutu.Вот вывод uname -a:

Linux work-laptop 4.15.0-39-generic #42-Ubuntu SMP 
Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

У меня есть докер-контейнер на основе изображения Python: 3.6.3.Я также попробовал это с изображениями Alpine, Jessie, Slim и Stretch, а также с некоторыми другими версиями 3.6.У всех них одна и та же проблема.

Я запускаю контейнер с именем 'nb' и присоединяюсь к интерактивной оболочке:

docker-compose run nb sh

Контейнер запускается без проблем, но когда япопробуйте открыть оболочку python:

python

Я получаю странное сообщение об ошибке:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)

Я проверил $ ​​PYTHONPATH и $ PYTHONHOME, оба не установлены.

Странно то, что если я укажу использовать python 2.7:

python2

, оболочка не запустится.Кроме того, если я использую любое из изображений 3.7 и открываю оболочку python 3.7, проблем не возникает.Кажется, проблема ограничена 3,6

Исследование, которое я провел по этому вопросу, говорит мне, что это, вероятно, проблема с переменными среды.Я попытался вручную установить PYTHONHOME на эти значения (индивидуально)

/usr/local/lib
/usr/local/lib/python
/usr/local/lib/python3.6

без изменений в результате.Единственное отличие состоит в том, что в сообщении об ошибке больше не предлагается устанавливать PYTHONHOME

Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)

. Я подумал, что проблема может быть в какой-то команде в моем dockerfile, поэтому я удалил все и просто развернул нефильтрованный образ питона.Та же проблема.Я перезагружал, пробовал другие изображения, без изменений.Я не могу представить, что все (или действительно любые) официальные образы Python могут быть причиной этого, поэтому я предполагаю, что проблема должна быть с моей хост-машиной, но ничего, что я не могу найти, затрагивает эту тему.Есть мысли?

1 Ответ

0 голосов
/ 18 декабря 2018

разобрался с моей проблемой.Я добавил монтирование тома в файл docker-compose, который монтировал локальный каталог проекта в каталог контейнера python.

volumes:
    - ./nb/python3.6:/usr/local/lib/python3.6

Спасибо @EelkevandenBos за помощь в понимании того, что проблема была ограничена docker-compose и отсутствовала только при использовании docker.После этого проблему было легко найти.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...