Обработка пакетов python в новом пользователе докера - PullRequest
1 голос
/ 07 октября 2019

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

Позвольте мне объяснить, как я управляю правами пользователей: при запуске контейнера Docker я запускаю его с -e USER_ID = $ UID, на точке входа я создаю нового пользователя с этим идентификатором пользователя, поэтому при запуске контейнера он будетзапустить с теми же разрешениями исходного пользователя. Я читал об этом по адресу: https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

О пакетах python: я знаю, что лучший способ для pip - использовать пользователя --user, поэтому пакеты будут установлены в ".local". проблема в том, что я запускаю pip install на самом Dockerfile, то есть до того, как я сменил пользователя (я все еще нахожусь в root). поэтому пакеты python установлены на «.local» пользователя root. при переходе на нового пользователя на точке входа я больше не могу получить доступ к «.local» и теряет все мои установленные пакеты python

Я думал о предоставлении новым пользователям разрешений для каталога /root/.local, но я не уверен, что это лучшее решение

Как я могу переключиться на нового пользователя с тем же UID исходного пользователя и использовать установленные мной пакеты python?

1 Ответ

1 голос
/ 07 октября 2019

Запустите pip install от имени пользователя root, без опции --user и без активной виртуальной среды.

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

Почти универсальный файл Docker может выглядеть так:

# Basic setup
FROM python:3.7
WORKDIR /app
# (We are root by default.)

# Install dependencies (globally, within the image).
COPY requirements.txt .
RUN pip3 install requirements.txt

# Copy the application in.
COPY . .

# Set up our runtime user.
RUN useradd -r app
USER app

# Specify the default command to run.
CMD ["/app/myapp"]

Dockerдовольно неудобно как среда разработки. Я бы предложил настроить обычную виртуальную среду Python для вашей повседневной работы (в вашей локальной системе, возможно, даже уже установлен Python) и использовать Docker главным образом в качестве механизма развертывания. Попытка смонтировать код приложения в контейнер дает вам странную гибридную среду, где, с одной стороны, «локальная» разработка требует корневого доступа и довольно сложной среды, а с другой - ваша контейнерная среда на самом деле не является тем, из чего вы строите. ваш Dockerfile и запущен в производство.

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