Запустите 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 и запущен в производство.