Odpowiedzi:
docker.sockto gniazdo UNIX, którego nasłuchuje demon Docker. To główny punkt wejścia dla Docker API. Może to być również gniazdo TCP, ale domyślnie ze względów bezpieczeństwa Docker domyślnie używa gniazda UNIX.
Klient Docker CLI domyślnie używa tego gniazda do wykonywania poleceń Dockera. Możesz również zmienić te ustawienia.
Mogą istnieć różne powody, dla których może być konieczne zamontowanie gniazda Docker w kontenerze. Podobnie jak wypuszczanie nowych kontenerów z innego kontenera. Lub do celów automatycznego wykrywania usług i rejestrowania. Zwiększa to powierzchnię ataku, więc powinieneś być ostrożny, jeśli montujesz gniazdo Dockera w kontenerze, w tym kontenerze działają zaufane kody, w przeciwnym razie możesz po prostu przejąć kontrolę nad hostem, na którym działa demon Docker, ponieważ Docker domyślnie uruchamia wszystkie kontenery jako root.
Gniazdo Docker ma grupę docker w większości instalacji, więc użytkownicy w tej grupie mogą uruchamiać polecenia docker przeciwko gnieździe docker bez uprawnień roota, ale rzeczywiste kontenery docker nadal uzyskują uprawnienia roota, ponieważ demon docker działa efektywnie jako root (wymaga uprawnień roota, aby uzyskać dostęp do przestrzeni nazw i grup cgroup) .
Mam nadzieję, że odpowiada na twoje pytanie.
Więcej informacji: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sockwewnątrz kontenera jest powszechną, ale bardzo niebezpieczną praktyką. Atakujący może wykonać dowolne polecenie, które może uruchomić usługa docker, co ogólnie zapewnia dostęp do całego systemu hosta, ponieważ usługa docker działa jako root. "
Wiem, że jest trochę za późno, ale mam nadzieję, że moja odpowiedź dostarczy tak wielu informacji
Pozwólcie mi najpierw porozmawiać o gniazdach Unix
Termin gniazda powszechnie odnosi się do gniazd IP. Są to te, które są powiązane z portem (i adresem), do których wysyłamy żądania TCP i otrzymujemy odpowiedzi.
Innym typem Socket jest Unix Socket, te gniazda są używane do IPC (Interprocess Communication). Nazywa się je również gniazdami domeny Unix ( UDS ). Gniazda Unix używają lokalnego systemu plików do komunikacji, podczas gdy gniazda IP używają sieci.
Demon Docker może nasłuchiwać żądań API Docker silnika przez trzech różnych rodzajów Socket: unix, tcp, and fd.
Domyślnie gniazdo domeny unix (lub gniazdo IPC) jest tworzone w /var/run/docker.sock
Zobaczmy kilka przykładów na żywo :
Serwer Docker używa tego gniazda do nasłuchiwania interfejsu API REST, a klienci używają go do wysyłania żądań interfejsu API do serwera.
curl może komunikować się z gniazdem uniksowym za pośrednictwem
--unix-socketflagi. Ponieważ interfejs API serwera Docker jest udostępniany jako REST, musielibyśmy wysyłać polecenia przez HTTP. Ponadto, ponieważ ten serwer jest lokalny (pamiętaj, system plików), możemy przekazać dowolną nazwę hosta w adresie URL (lub trzymać się lokalnego hosta, to też zadziała!). Serwer nie dba o nazwę hosta, tylko o ścieżkę.
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
}
]
Niektóre polecenia :
Z docker.sock możesz zrobić wiele rzeczy
sprawdź ten piękny artykuł