Respostas:
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
Deixe-me falar primeiro sobre Unix Sockets
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.
curl pode falar com um soquete Unix através da
--unix-socket
bandeira. Como a API do Docker Server é exposta como REST, precisamos enviar comandos por HTTP. Além disso, como este servidor é local (lembre-se, o sistema de arquivos), podemos passar qualquer nome de host na URL (ou manter o host local, que também funcionará bem!). O servidor não se importa com o nome do host, apenas o caminho.
curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq
[
{
"Containers": -1,
"Created": 1525888860,
"Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
"Labels": null,
"ParentId": "",
"RepoDigests": [
"postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
],
"RepoTags": null,
"SharedSize": -1,
"Size": 39507096,
"VirtualSize": 39507096
}
]
Alguns comandos :
Você pode fazer muitas coisas com o docker.sock
confira este belo artigo