¿Debo dockerizar la aplicación Django como usuario root? En caso afirmativo, ¿cómo puedo configurar un usuario no root para Django? Porque en la aplicación node.js debería tener USUARIO: nodo, que es una mejor práctica.
Ejemplo de código de la página acoplable oficial que no incluye no root:
FROM python:3 ENV PYTHONUNBUFFERED=1 WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/
Es genéricamente una buena práctica.
Al comienzo de su Dockerfile, antes de COPY
algo, cree el usuario. No es necesario que tenga ninguna propiedad específica y no es necesario que coincida con ningún ID de usuario de host específico. La única razón particular para hacer esto temprano es evitar repetirlo en las reconstrucciones.
Al final de su Dockerfile, después de ejecutar todos los pasos de compilación, solo cambie USER
al nuevo usuario. El código y las bibliotecas instaladas serán propiedad del usuario root; y eso es bueno, porque significa que la aplicación no puede sobrescribir accidentalmente el código de la aplicación.
FROM python:3 # Create the non-root user. Doing this before any COPY means it won't # be repeated on rebuild, for marginal savings in space and rebuild time. # The user can have any name and any uid; it does not need to match any # particular host system where the image might run. RUN adduser --system --no-create-home someuser # Install the application as in the question (still as root). ENV PYTHONUNBUFFERED=1 WORKDIR /code COPY requirements.txt . RUN pip install -r requirements.txt COPY . . # Explain how to run the container. Only switch to the non-root user now. EXPOSE 8000 USER someuser CMD ["./main.py"]
No intente escribir archivos dentro del contenedor; en su lugar, utilice un contenedor de base de datos independiente para la persistencia. No pase un ID de usuario de host como argumento de compilación. No configure una contraseña para el usuario ni intente configurar inicios de sesión interactivos. No cree un directorio de inicio; no se usará.