Próbuję zrozumieć rzeczywisty powód montowania docker.sock
w docker-compose.yml
pliku. Czy służy do automatycznego wykrywania?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
to 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.sock
wewną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
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.
Niektóre polecenia :
sprawdź ten piękny artykuł
źródło
w zasadzie wystawia demona docker hosta do kontenera. więc możesz wywołać docker api / client ze swojego kontenera, aby uruchomić / zatrzymać / zbudować obrazy / kontenery, tak jak bezpośrednie wywołanie tych poleceń na hoście.
źródło