Установка Python PIP для Docker контейнера не работает - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь настроить python-pip для моего контейнера (ов) докера. Но это дает мне ошибку, что у меня нет разрешения. После того, как я использую sudo, это дает мне еще одну ошибку.

Я пытался использовать sudo для получения прав root. Я также попробовал команду exec и запустил.

sudo docker container run davidrazd/discord-node-10 sudo apt-get install python-pip
sudo docker container exec davidrazd/discord-node-10 sudo apt-get install python-pip

docker: Ответ об ошибке от демона: Ошибка создания среды выполнения OCI: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \" sudo \ ": исполняемый файл не найден в $ PATH": неизвестно.

и без sudo:

E: Не удалось открыть файл блокировки / var / lib / dpkg / lock-frontend - открыть (13: разрешение запрещено)

E: Невозможно получить блокировку внешнего интерфейса dpkg (/ var / lib / dpkg / lock-frontend), вы root?

1 Ответ

0 голосов
/ 05 января 2019

Вот три причины, по которым я думаю, вам следует пересмотреть использование Docker и убедиться, что вы получаете максимальную отдачу от контейнеров.

  1. у вас есть изображение с именем ...-node-10. Вы не должны нуждаться в определенных изображениях для определенных узлов. Все они должны работать на одном образе и, по мере необходимости, настраиваться во время выполнения (это должно быть сведено к минимуму, обычно такие вещи, как обнаружение или динамическое конфигурирование). Если 10 является версией, вы должны использовать теги для ее версии, а не сам идентификатор изображения.

  2. Существует действительный вариант использования для одноразового выполнения установки в работающем контейнере через exec для одноразовых установок пакета (при условии, что установка исчезнет, ​​когда контейнер остановится), но docker run ... apt-get install на самом деле не имеет смысла для меня. Как указывает @DavidMaze в комментарии к вопросу, установки, которые должны быть, всегда должны быть частью Dockerfile. Если вы устанавливаете пакеты в долгоживущие контейнеры - не надо и не надо. Худшее, что случается с людьми с докером, это то, что они пытаются обращаться с контейнерами как с долгоживущими виртуальными машинами, когда они должны рассматривать их как эфемерные среды выполнения , которые поддерживают минимальное состояние, по существу неизменными (и, следовательно, легко заменяемыми). в следующей версии) их образ содержит все их зависимости во время установки и хранит любые долгосрочные данные на отдельном томе док-станции (который, как мы надеемся, сам резервируется).

  3. Скорее всего, пользователь настраивает ваше приложение для запуска в качестве пользователя USER в вашем Dockerfile, но вы пытаетесь запустить привилегированные команды, не устанавливая для своего пользователя значение USER. Затем вы пытаетесь запустить sudo. Но sudo не имеет особого смысла в контексте контейнера и, как правило, не устанавливается (и если бы это было так, это означало бы, что вам нужно каким-то образом настроить пользователя на sudo, поэтому это не твоя жизнь проще, просто сложнее). Вы можете установить для пользователя docker exec время на root с docker exec -u root .... Но вам не нужно этого делать - все настройки должны быть выполнены в Dockerfile, и вы должны отправить новый dockerfile для изменения версий.

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

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