Estoy creando una imagen simple de mi aplicación python Django en Docker. Pero al final del contenedor de construcción, arroja la siguiente advertencia (lo estoy construyendo en Ubuntu 20.04):
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead
¿Por qué arroja esta advertencia si estoy instalando los requisitos de Python dentro de mi imagen? Estoy construyendo mi imagen usando:
sudo docker build -t my_app:1 .
¿Debería preocuparme por advertir que se lanza un pip, porque sé que puede romper mi sistema?
Aquí está mi Dockerfile:
FROM python:3.8-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
La forma en que se construye su contenedor no agrega un usuario, por lo que todo se hace como root.
Puede crear un usuario e instalarlo en el directorio de inicio de ese usuario haciendo algo como esto;
FROM python:3.8.3-alpine RUN pip install --upgrade pip RUN adduser -D myuser USER myuser WORKDIR /home/myuser COPY --chown=myuser:myuser requirements.txt requirements.txt RUN pip install --user -r requirements.txt ENV PATH="/home/myuser/.local/bin:${PATH}" COPY --chown=myuser:myuser . . CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Puede ignorar esta advertencia ya que crea la imagen para un propósito aislado y, por lo tanto, está tan aislada como un entorno virtual desde el punto de vista organizativo. No técnicamente, pero eso no importa aquí.
Por lo general, no debería valer la pena invertir el tiempo y crear un entorno virtual en una imagen o agregar un usuario como en la otra respuesta, solo para evitar la advertencia, ya que no debería tener ningún problema con esto.
Simplemente verifique pip -V
y pip3 -V
para saber si necesita prestar atención para no usar pip
por error para Python 2 cuando quiere pip
para Python 3. Pero eso debería ser todo, y si instala solo pip para python 3, usted no tendra ese problema de todos modos.
No me gusta ignorar las advertencias, ya que un día supervisarás una importante.
Aquí hay una buena explicación sobre las mejores prácticas de docker con python . Busque Example with virtualenv
y encontrará esto:
# temp stage FROM python:3.9-slim as builder WORKDIR /app ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 RUN apt-get update && \ apt-get install -y --no-install-recommends gcc RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt . RUN pip install -r requirements.txt # final stage FROM python:3.9-slim COPY --from=builder /opt/venv /opt/venv WORKDIR /app ENV PATH="/opt/venv/bin:$PATH"
Funciona como el encanto. Sin advertencias o similares. Por cierto, también recomiendan crear un usuario no root por razones de seguridad.
EDITAR: para deshacerse de todas las advertencias, es posible que también desee agregar las siguientes entradas a la parte del constructor de su Dockerfile (se aplica a Debian 8.3.x ):
ARG DEBIAN_FRONTEND=noninteractive ARG DEBCONF_NOWARNINGS="yes" RUN python -m pip install --upgrade pip && \ ...