Antes de .NET 8, los contenedores se ejecutaban como root por defecto, y a partir de .NET 8, todas nuestras imágenes de contenedores de Linux contendrán usuarios no root. Podrás alojar contenedores .NET con una sola línea de código como usuario no root. Este cambio a nivel de plataforma hará que tu aplicación sea más segura y hará que .NET sea uno de los ecosistemas de desarrolladores más seguros. Es un cambio pequeño, pero tiene un gran impacto en la defensa en profundidad.
Entender los UIDs y GIDs en los contenedores Docker
Por defecto, el proceso en el contenedor se ejecuta con privilegios de usuario root, y este usuario root es el mismo usuario que el root en la máquina anfitriona. ¿No suena eso aterrador? Porque significa que una vez que un proceso en un contenedor tiene la oportunidad adecuada, puede controlar todo en la máquina anfitriona.
Referencia:El inicio de sesión del hipervínculo es visible.
Imagen Docker de .NET 8
Hay dos cambios principales en la imagen Docker de .NET 8, como sigue:
- Image crea una nueva cuenta y grupo de app, y ejecuta la app con la cuenta de app por defecto
- Al cambiar al puerto 8080, resultó ser el puerto 80, ya que el puerto 80 es un puerto privilegiado, se requieren privilegios root (al menos en algunos lugares)
Dirección del código fuente de la imagen Docker de .NET:El inicio de sesión del hipervínculo es visible.
Las dependencias son las siguientes:
aspnet:8.0-bookworm-slim -> dotnet/runtime-8.0.0-bookworm-slim-amd64 -> dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 -> amd64/debian:bookworm-slim
dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 se ve así:
Como se muestra a continuación:
Usa la cuenta de la app para introducir la imagen básica, y el comando es el siguiente:
Muestra las variables actuales de usuario y entorno, como se muestra en la siguiente figura:
Referencia:El inicio de sesión del hipervínculo es visible.
Archivo Dockerfile
Si necesitas empaquetar tu proyecto en una imagen Docker, necesitas crear un nuevo soporte para contenedor .NET 8 Docker, y la configuración predeterminada del archivo Dockerfile en el entorno Linux es la siguiente:
Si configuras la zona horaria del sistema en el Dockerfile, el siguiente código:
El error de Permiso Denegado puede ocurrir de la siguiente manera:
4>F:\itsvse\Dockerfile : error CTC1014: #21 [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/horario 4>F:\itsvse\Dockerfile : error CTC1014: #21 0.314 ln: no se pudo crear un enlace simbólico '/etc/localtime': Permiso denegado 4>F:\itsvse\Dockerfile : error CTC1014: #21 ERROR: el proceso "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" no se completó correctamente: código de salida: 1 4>F:\itsvse\Dockerfile : error CTC1014: ------ 4>F:\itsvse\Dockerfile : error CTC1014: > [3/3 final] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : error CTC1014: #21 0.314 ln: no se pudo crear un enlace simbólico '/etc/localtime': Permiso denegado Usa la cuenta raíz para establecer la zona horaria, luego vuelve a la cuenta de la app y modifícala de la siguiente manera:
(Fin)
|