Estou tentando entender o motivo real da montagem docker.sock
no docker-compose.yml
arquivo. É para descoberta automática?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
é o soquete UNIX que o daemon do Docker está ouvindo. É o principal ponto de entrada da API do Docker. Também pode ser um soquete TCP, mas por padrão, por motivos de segurança, o Docker usa o soquete UNIX como padrão.
O cliente do Docker cli usa esse soquete para executar comandos do Docker por padrão. Você pode substituir essas configurações também.
Pode haver várias razões pelas quais você pode precisar montar o soquete do Docker dentro de um contêiner. Como lançar novos contêineres de outro contêiner. Ou para fins de detecção automática de serviços e registro. Isso aumenta a superfície de ataque; portanto, você deve tomar cuidado ao montar o soquete do docker dentro de um contêiner, pois existem códigos confiáveis em execução nesse contêiner; caso contrário, você pode simplesmente comprometer o host que está executando o daemon do docker, pois o Docker, por padrão, lança todos os contêineres como raiz.
O soquete do Docker possui um grupo de janelas de encaixe na maioria das instalações, para que os usuários desse grupo possam executar comandos do docker no soquete do docker sem permissão de root, mas os contêineres de docker reais ainda obtêm permissão de root, já que o daemon do docker é executado como root com eficiência (ele precisa de permissão de root para acessar o namespace e cgroups) .
Espero que responda sua pergunta.
Mais informações: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
dentro do contêiner é uma prática comum, mas muito perigosa. Um invasor pode executar qualquer comando que o serviço docker possa executar, o que geralmente fornece acesso a todo o sistema host enquanto o serviço docker é executado como raiz. "Eu sei que é tarde, mas espero que minha resposta dê tantas idéias
O termo soquetes geralmente se refere a soquetes IP. Esses são os que estão vinculados a uma porta (e endereço) para a qual enviamos solicitações TCP e obtemos respostas.
Outro tipo de soquete é um soquete Unix, esses soquetes são usados para IPC (Interprocess Communication). Eles também são chamados de Soquetes de Domínio Unix ( UDS ). Os soquetes Unix usam o sistema de arquivos local para comunicação, enquanto os soquetes IP usam a rede.
O daemon Docker pode receber solicitações da API do Docker Engine por meio de três tipos diferentes de Socket:
unix, tcp, and fd
.Por padrão, um soquete de domínio unix (ou soquete IPC) é criado em /var/run/docker.sock
Vamos ver alguns exemplos ao vivo :
O Docker Server usa esse soquete para escutar a API REST, e os clientes usam o soquete para enviar solicitações de API ao servidor.
Alguns comandos :
confira este belo artigo
fonte
basicamente expõe o daemon do docker do host ao contêiner. para que você possa chamar o docker api / client do seu contêiner para iniciar / parar / criar imagens / contêineres como chamar diretamente esses comandos no host.
fonte