J'essaie de comprendre la raison réelle du montage docker.sock
dans le docker-compose.yml
fichier. Est-ce pour la découverte automatique?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
est le socket UNIX que le démon Docker écoute. C'est le principal point d'entrée de l'API Docker. Il peut également s'agir d'un socket TCP, mais par défaut, pour des raisons de sécurité, Docker utilise par défaut le socket UNIX.
Le client cli Docker utilise ce socket pour exécuter les commandes docker par défaut. Vous pouvez également remplacer ces paramètres.
Il peut y avoir différentes raisons pour lesquelles vous devrez peut-être monter le socket Docker à l'intérieur d'un conteneur. Comme lancer de nouveaux conteneurs depuis un autre conteneur. Ou à des fins de découverte de service automatique et de journalisation. Cela augmente la surface d'attaque, vous devez donc faire attention si vous montez le socket docker à l'intérieur d'un conteneur, des codes de confiance s'exécutent à l'intérieur de ce conteneur, sinon vous pouvez simplement compromettre votre hôte qui exécute le démon docker, car Docker par défaut lance tous les conteneurs en tant que root.
Docker socket a un groupe docker dans la plupart des installations afin que les utilisateurs de ce groupe puissent exécuter des commandes docker sur le socket docker sans autorisation root, mais les conteneurs docker réels obtiennent toujours l'autorisation root car le démon docker s'exécute efficacement en tant que root (il a besoin d'une autorisation root pour accéder à l'espace de noms et aux groupes de contrôle) .
J'espère que cela répond à votre question.
Plus d'infos: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
à l'intérieur du conteneur est une pratique courante, mais très dangereuse. Un attaquant peut exécuter n'importe quelle commande que le service docker peut exécuter, ce qui donne généralement accès à tout le système hôte lorsque le service docker s'exécute en tant que root. "Je sais qu'il est un peu tard mais j'espère que ma réponse vous donnera tant d'idées
Le terme sockets fait généralement référence aux sockets IP. Ce sont ceux qui sont liés à un port (et à une adresse), auxquels nous envoyons des requêtes TCP et dont nous obtenons des réponses.
Un autre type de socket est un socket Unix, ces sockets sont utilisés pour IPC (Interprocess Communication). Ils sont également appelés sockets de domaine Unix ( UDS ). Les sockets Unix utilisent le système de fichiers local pour la communication, tandis que les sockets IP utilisent le réseau.
Le démon Docker peut écouter les requêtes API Docker Engine via trois différents types de Socket:
unix, tcp, and fd
.Par défaut, un socket de domaine Unix (ou socket IPC) est créé dans /var/run/docker.sock
Voyons quelques exemples en direct :
Docker Server utilise ce socket pour écouter l'API REST et les clients utilisent le socket pour envoyer des demandes d'API au serveur.
Quelques commandes :
consultez ce bel article
la source
il expose essentiellement le démon docker hôte au conteneur. afin que vous puissiez appeler docker api / client à partir de votre conteneur, pour démarrer / arrêter / créer des images / conteneurs comme appeler directement ces commandes sur l'hôte.
la source