Estoy tratando de entender la razón real para el montaje docker.sock
en el docker-compose.yml
archivo. ¿Es para autodescubrimiento?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
es el socket de UNIX que Docker daemon está escuchando. Es el principal punto de entrada para Docker API. También puede ser un socket TCP, pero de manera predeterminada por razones de seguridad, Docker usa de manera predeterminada el socket UNIX.
El cliente cli de Docker usa este socket para ejecutar los comandos de docker de manera predeterminada. También puede anular esta configuración.
Puede haber diferentes razones por las que puede necesitar montar el zócalo Docker dentro de un contenedor. Como lanzar nuevos contenedores desde otro contenedor. O para fines de descubrimiento y registro de servicios automáticos. Esto aumenta la superficie de ataque, por lo que debe tener cuidado si monta el zócalo docker dentro de un contenedor, hay códigos confiables que se ejecutan dentro de ese contenedor; de lo contrario, simplemente puede comprometer su host que ejecuta docker daemon, ya que Docker lanza de forma predeterminada todos los contenedores como root.
Docker Socket tiene un grupo Docker en la mayoría de las instalaciones, por lo que los usuarios dentro de ese grupo pueden ejecutar comandos Docker contra Docker Socket sin permiso de root, pero los contenedores Docker reales aún obtienen permiso de root ya que Docker Daemon se ejecuta como root de manera efectiva (necesita permiso de root para acceder al espacio de nombres y cgroups) .
Espero que responda tu pregunta.
Más información: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
dentro del contenedor es una práctica común, pero muy peligrosa. Un atacante puede ejecutar cualquier comando que pueda ejecutar el servicio Docker, que generalmente proporciona acceso a todo el sistema host mientras el servicio Docker se ejecuta como root. "Sé que es un poco tarde, pero espero que mi respuesta dé muchas ideas
El término Sockets comúnmente se refiere a Sockets IP. Estos son los que están vinculados a un puerto (y una dirección), a los que enviamos solicitudes TCP y recibimos respuestas.
Otro tipo de Socket es un Socket Unix, estos sockets se utilizan para IPC (comunicación entre procesos). También se llaman Sockets de dominio Unix ( UDS ). Los Sockets Unix usan el sistema de archivos local para la comunicación, mientras que los Sockets IP usan la red.
El demonio del estibador puede escuchar las solicitudes de API acoplable motor a través de tres diferentes tipos de zócalo:
unix, tcp, and fd
.Por defecto, se crea un socket de dominio Unix (o socket IPC) en /var/run/docker.sock
Veamos algunos ejemplos en vivo :
Docker Server usa este socket para escuchar la API REST, y los clientes usan el socket para enviar solicitudes de API al servidor.
Algunos comandos :
mira este hermoso artículo
fuente
Básicamente expone el host docker demonio al contenedor. para que pueda invocar docker api / client desde su contenedor, para iniciar / detener / construir imágenes / contenedores como llamar directamente a esos comandos en el host.
fuente