Compartir comentarios
Las respuestas se generan en base a la documentación.

Comprender los requisitos de permisos para Windows

Esta página contiene información sobre los requisitos de permisos para ejecutar e instalar Docker Desktop en Windows, la funcionalidad del proceso de asistencia privilegiado com.docker.service y la justificación de este enfoque.

También ofrece aclaraciones sobre la ejecución de contenedores como root en contraste con tener acceso de Administrador en el host, así como los privilegios de Docker Engine y los contenedores de Windows.

Docker Desktop en Windows está diseñado pensando en la seguridad. Los derechos de administración solo se requieren cuando es absolutamente necesario.

Requisitos de permisos

Los permisos requeridos para instalar y ejecutar Docker Desktop dependen del modo de instalación que utilices.

Instalación por usuario (Beta)

En el modo por usuario, Docker Desktop se instala en %LOCALAPPDATA%\Programs\DockerDesktop y escribe solo en las claves de registro del usuario actual (HKCU). Esto significa:

  • No se requieren privilegios de administrador para instalar o actualizar Docker Desktop.
  • Después de la instalación, Docker Desktop se puede ejecutar sin privilegios de administrador.
  • Algunas configuraciones marcadas como Requires password en Settings aún requieren elevación de privilegios. Cuando cambias uno de estos ajustes y seleccionas Apply, Docker Desktop abre una solicitud de UAC para acceso de administrador.

La instalación por usuario no instala automáticamente el servicio de asistencia privilegiado com.docker.service. Como resultado, las características que dependen de él, como el backend de Hyper-V y los contenedores de Windows, no están disponibles. Para la mayoría de los usuarios esto no representa una limitación, ya que el backend de WSL 2 cubre la gran mayoría de los casos de uso.

Instalación para todos los usuarios

En el modo para todos los usuarios, Docker Desktop se instala en C:\Program Files\Docker\Docker y escribe en las claves de registro de la máquina local (HKLM). Ambas ubicaciones requieren privilegios de administrador para ser modificadas, por lo que:

  • Se requieren privilegios de administrador para instalar y actualizar Docker Desktop.
  • Durante la instalación recibes una solicitud de UAC que permite instalar el servicio de asistencia privilegiado com.docker.service.
  • Después de la instalación, Docker Desktop se puede ejecutar sin privilegios de administrador.

Ejecutar Docker Desktop sin el asistente privilegiado no requiere que los usuarios pertenezcan al grupo docker-users. Sin embargo, algunas funciones que requieren operaciones privilegiadas sí tendrán este requisito.

Si fuiste quien realizó la instalación, se te añade automáticamente al grupo docker-users, pero otros usuarios deben añadirse manualmente. Esto permite al administrador controlar quién tiene acceso a las características que requieren privilegios más altos, como la creación y gestión de la VM de Hyper-V o el uso de contenedores de Windows.

Cuando se inicia Docker Desktop, todos los named pipes (tuberías con nombre) sin privilegios se crean de modo que solo los siguientes usuarios puedan acceder a ellos:

  • El usuario que inició Docker Desktop.
  • Los miembros del grupo local Administrators.
  • La cuenta LOCALSYSTEM.

Operaciones que siempre requieren elevación

Las siguientes operaciones requieren privilegios de administrador independientemente del modo de instalación:

  • Habilitar WSL 2 por primera vez: WSL 2 debe estar habilitado en la máquina antes de que Docker Desktop pueda ejecutarse. Esta es una operación única por máquina. Una vez habilitado WSL 2, no es necesario volver a habilitarlo para posteriores instalaciones o actualizaciones de Docker Desktop.
  • Configuraciones marcadas como Requires password: Ciertos ajustes de Docker Desktop afectan a la configuración a nivel de sistema y requieren credenciales de administrador para aplicarse. Están marcados claramente como Requires password. Cuando cambias uno de estos ajustes y seleccionas Apply, Docker Desktop solicita credenciales de administrador.

Asistente privilegiado (Privileged helper)

Docker Desktop necesita realizar un conjunto limitado de operaciones privilegiadas, las cuales son llevadas a cabo por el proceso de asistencia privilegiado com.docker.service. Este enfoque permite, siguiendo el principio del menor privilegio, que el acceso de Administrador se utilice únicamente para las operaciones en las que es absolutamente necesario, permitiendo al mismo tiempo utilizar Docker Desktop como un usuario sin privilegios.

Note

com.docker.service solo se instala en el modo de instalación para todos los usuarios. No se utiliza en la instalación por usuario, la cual depende únicamente del backend de WSL 2 y no es compatible con Hyper-V ni con contenedores de Windows.

El asistente privilegiado com.docker.service es un servicio de Windows que se ejecuta en segundo plano con privilegios de SYSTEM. Escucha en la tubería con nombre //./pipe/dockerBackendV2. El desarrollador ejecuta la aplicación Docker Desktop, la cual se conecta a la tubería con nombre y envía comandos al servicio. Esta tubería con nombre está protegida y solo los usuarios que forman parte del grupo docker-users pueden acceder a ella.

El servicio realiza las siguientes funciones:

  • Asegurar que kubernetes.docker.internal esté definido en el archivo de hosts de Win32. Definir el nombre DNS kubernetes.docker.internal permite a Docker compartir contextos de Kubernetes con contenedores.
  • Asegurar que host.docker.internal y gateway.docker.internal estén definidos en el archivo de hosts de Win32. Estos apuntan a la dirección IP local del host y permiten que una aplicación resuelva la IP del host utilizando el mismo nombre, ya sea desde el propio host o desde un contenedor.
  • Almacenar en caché de forma segura la política de Registry Access Management, que es de solo lectura para el desarrollador.
  • Crear la VM de Hyper-V "DockerDesktopVM" y gestionar su ciclo de vida: iniciarla, detenerla y destruirla. El nombre de la VM está codificado en el código del servicio, por lo que este no se puede utilizar para crear o manipular ninguna otra VM.
  • Mover el archivo o carpeta VHDX.
  • Iniciar y detener el motor Docker de Windows y consultar si está en ejecución.
  • Eliminar todos los archivos de datos de los contenedores de Windows.
  • Comprobar si Hyper-V está habilitado.
  • Comprobar si el cargador de arranque activa Hyper-V.
  • Comprobar si las características requeridas de Windows están tanto instaladas como habilitadas.
  • Realizar pruebas de estado (healthchecks) y recuperar la versión del propio servicio.

El modo de inicio del servicio depende de qué motor de contenedores esté seleccionado y, para WSL, de si es necesario mantener host.docker.internal y gateway.docker.internal en el archivo de hosts de Win32. Esto se controla mediante un ajuste dentro de Use the WSL 2 based engine en la página de configuración. Cuando está configurado, el motor de WSL se comporta igual que Hyper-V. Por lo tanto:

  • Con los contenedores de Windows, o contenedores Linux de Hyper-V, el servicio se inicia al arrancar el sistema y se ejecuta de forma continua, incluso cuando Docker Desktop no está en ejecución. Esto es necesario para poder iniciar Docker Desktop sin privilegios de administrador.
  • Con contenedores Linux de WSL 2, el servicio no es necesario y por lo tanto no se ejecuta automáticamente al arrancar el sistema. Cuando cambias a contenedores de Windows o contenedores Linux de Hyper-V, o decides mantener host.docker.internal y gateway.docker.internal en el archivo de hosts de Win32, aparece una solicitud de UAC que te pide aceptar la operación privilegiada para iniciar el servicio. Si se acepta, el servicio se inicia y se configura para arrancar automáticamente en el siguiente inicio de Windows.

Contenedores ejecutándose como root dentro de la VM de Linux

El demonio Docker y los contenedores de Linux se ejecutan en una VM de Linux minimalista y de propósito especial gestionada por Docker. Esta es inmutable, por lo que no puedes ampliarla ni cambiar el software instalado. Esto significa que, aunque los contenedores se ejecutan por defecto como root, esto no permite alterar la VM ni otorga acceso de Administrador a la máquina host de Windows. La VM de Linux sirve como límite de seguridad y limita los recursos del host a los que se puede acceder. El uso compartido de archivos utiliza un servidor de archivos diseñado en el espacio de usuario y cualquier directorio del host montado mediante bind en los contenedores de Docker conserva sus permisos originales. Los contenedores no tienen acceso a ningún archivo del host más allá de los compartidos explíxamente.

Enhanced Container Isolation

Además, Docker Desktop es compatible con el modo Enhanced Container Isolation (ECI), disponible únicamente para clientes de Business, el cual protege aún más los contenedores sin afectar los flujos de trabajo de los desarrolladores.

ECI ejecuta automáticamente todos los contenedores dentro de un espacio de nombres de usuario (user-namespace) de Linux, de modo que el root en el contenedor se mapea a un usuario sin privilegios dentro de la VM de Docker Desktop. ECI utiliza esta y otras técnicas avanzadas para proteger aún más los contenedores dentro de la VM de Linux de Docker Desktop, de manera que estén más aislados del demonio de Docker y de otros servicios que se ejecutan dentro de la VM.

Contenedores de Windows

Warning

Habilitar los contenedores de Windows tiene implicaciones de seguridad importantes.

Note

Los contenedores de Windows solo se admiten en el modo de instalación para todos los usuarios. No están disponibles cuando Docker Desktop se instala por usuario. Consulta Modos de instalación.

A diferencia del Docker Engine de Linux y sus contenedores que se ejecutan en una VM, los contenedores de Windows se implementan utilizando características del sistema operativo y se ejecutan directamente en el host de Windows. Si habilitas los contenedores de Windows durante la instalación, el usuario ContainerAdministrator utilizado para la administración dentro del contenedor es un administrador local en la máquina host. Habilitar los contenedores de Windows durante la instalación permite que los miembros del grupo docker-users puedan elevar sus privilegios a administradores en el host. Para las organizaciones que no quieren que sus desarrolladores ejecuten contenedores de Windows, se proporciona la opción del instalador --no-windows-containers para deshabilitar su uso.

Redes

Para la conectividad de red, Docker Desktop utiliza un proceso en el espacio de usuario (vpnkit), el cual hereda del usuario que lo inició restricciones como reglas de firewall, VPN, propiedades del proxy HTTP, etc.