У нас с коллегой есть большая головоломка Docker.
Когда мы запускаем следующие команды, мы получаем разные результаты.
docker run -it python:3.8.6 /bin/bash
pip install fbprophet
У меня он устанавливается отлично, а у него выдает ошибку и не устанавливается. Я думал, что весь смысл докера в том, чтобы предотвратить подобные проблемы, поэтому я действительно озадачен.
Я даю более подробную информацию ниже, но мой главный вопрос:
Мы оба используем Docker на новом MacBook Pro с аналогичными характеристиками на Catalina. Его движок Docker версии 20.x.x немного новее моего 19.X.X. Также:
Результат всегда был один и тот же: он получает ошибку, а я нет.
Ошибка, которую он получает, заключается в следующем.
Error:
Installing collected packages: six, pytz, python-dateutil, pymeeus, numpy, pyparsing, pillow, pandas, korean-lunar-calendar, kiwisolver, ephem, Cython, cycler, convertdate, tqdm, setuptools-git, pystan, matplotlib, LunarCalendar, holidays, cmdstanpy, fbprophet
Running setup.py install for fbprophet ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’; __file__=‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’;f=getattr(tokenize, ‘“’”‘open’“‘”’, open)(__file__);code=f.read().replace(‘“’”‘\r\n’“‘”’, ‘“’”‘\n’“‘”’);f.close();exec(compile(code, __file__, ‘“’”‘exec’“‘”’))' install --record /tmp/pip-record-7n8tvfkb/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.8/fbprophet
cwd: /tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/
Complete output (10 lines):
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/fbprophet
creating build/lib/fbprophet/stan_model
Importing plotly failed. Interactive plots will not work.
INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_dfdaf2b8ece8a02eb11f050ec701c0ec NOW.
error: command ‘gcc’ failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’; __file__=‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’;f=getattr(tokenize, ‘“’”‘open’“‘”’, open)(__file__);code=f.read().replace(‘“’”‘\r\n’“‘”’, ‘“’”‘\n’“‘”’);f.close();exec(compile(code, __file__, ‘“’”‘exec’“‘”’))' install --record /tmp/pip-record-7n8tvfkb/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.8/fbprophet Check the logs for full command output.
Обратите внимание, что выполнение двух приведенных мной команд всегда приводит к ошибкам, но они не являются критическими. Обновление setuptools и установка зависимостей до того, как fbprophet решит эти незначительные ошибки. Показанная выше ошибка связана с gcc и возникает только у некоторых людей.
Необязательные дополнительные вопросы:
Если у кого-то есть лучшее описание названия вопроса, пожалуйста, дайте мне знать. Я думаю, что это нуждается в улучшении.
Если у вас нет ничего интересного в докере, попробуйте docker rm -f $(docker ps -aq) && docker system prune --all --volumes
. Затем повторите попытку на своем Mac. Я вижу то же поведение, что и ваш коллега на моей стороне (Big Sur с последним демоном докера)
Вот журнал запуска данной команды на новом докере, если кто-то хочет быстро взглянуть на него. dpaste.com//C5V8QKQLA
Возможно, изображение для этого тега изменилось. Можете ли вы сравнить ваши два docker images
результата?
@β.εηοιτ.βε спасибо. Он пробовал их, но это не сработало :(
@DannyVarod, это отличается от проверки идентификаторов образов докеров? Извините, я не уверен, что понимаю.
@GermanCapuano то же самое, что и проверка идентификаторов, в отличие от проверки тегов, поскольку тег может быть обновлен до нового идентификатора.
@GermanCapuano Ваш коллега ничего не должен делать, у него правильное поведение. Вы должны запустить эти команды
@GermanCapuano, не могли бы вы принять ответ, если он помог :)
@OlesyaBolobova, да, я просто ждал несколько дней, чтобы увидеть, не хочет ли кто-нибудь прокомментировать это или не согласиться с чем-то. Никто этого не сделал, поэтому я принял это и дал тебе награду. Спасибо :)
Это решение. Эта проблема связана не только с докером, но и с самим fbprophet. Избегать:
docker run -it python:3.8.6 /bin/bash
pip install numpy pandas blahblah...
pip install fbprophet
Мы попробовали это. Это не решило. Спасибо за предложение.
Как это исправить?
Ваша ошибка сообщает о проблеме GCC/компиляции.
Быстрый поиск показывает в основном проблемы, связанные с версией python/gcc (одна , две , три).
Но вы правы, это не похоже на то, что это могло произойти внутри одного конкретного контейнера.
На самом деле это похоже на какую-то OOM-проблему.
Кроме того, это виртуальная машина? Стэну требуется значительный объем памяти для скомпилируйте модели, и эта ошибка может возникнуть, если у вас закончилась оперативная память пока он компилируется.
Я провел небольшое тестирование.
На моей машине процесс компиляции потреблял до 2,4 Гб оперативной памяти.
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
uname -r
3.10.0-1160.6.1.el7.x86_64
docker --version
Docker version 20.10.1, build 831ebea
# works fine
docker run --rm -it -m 3G python:3.8.6 /bin/bash
# fails with error: command 'gcc' failed with exit status 1
# actually it was killed by OOM killer
docker run --rm -it -m 2G python:3.8.6 /bin/bash
# yes, here he is
tail -f /var/log/messages | grep -i 'killed process'
Dec 22 08:34:09 cent7-1 kernel: Killed process 5631 (cc1plus), UID 0, total-vm:2073600kB, anon-rss:1962404kB, file-rss:15332kB, shmem-rss:0kB
Dec 22 08:35:56 cent7-1 kernel: Killed process 5640 (cc1plus), UID 0, total-vm:2056816kB, anon-rss:1947392kB, file-rss:15308kB, shmem-rss:0kB
Проверьте журнал OOM killer на проблемной машине.
Достаточно ли оперативной памяти для Docker?
Может ли обновление версии движка докеров сломать контейнер?
В общем, так быть не должно.
Но для v20.10.0
Docker ввел очень большой набор изменений, связанных с памятью и контрольными группами.
После того, как вы исключите все очевидные причины (например, на машине вашего друга просто не хватает оперативной памяти), вам может понадобиться покопаться в настройках вашего демона докера, связанных с памятью / cgroups / и т. д.
Как один и тот же контейнер может давать разные результаты на двух компьютерах?
Ну, технически это вполне возможно.
Контейнерные программы по-прежнему используют ядро ОС хоста.
Не все настройки ядра имеют "пространство имен", т.е. е. можно установить исключительно для одного конкретного контейнера.
Многие из них (на самом деле, большинство) по-прежнему глобальны и могут влиять на поведение вашей программы.
Хотя я не думаю, что это связано с вашей проблемой. Но для сложных программ, зависящих от конкретных настроек ядра, это необходимо учитывать.
Ух ты!! Это была память. Он увеличил память и все заработало!!!! Похоже, мы случайно уложились в лимит оперативной памяти, и различий в докере хватило, чтобы один вышел из строя, а другой — нет.
Разница в версии докера может не повлиять на эту проблему. Поскольку моя среда выглядит так, версия докера 19.03.13, Ubuntu 20.04.