Ответы:
docker.sock
- это сокет UNIX, который слушает демон Docker. Это основная точка входа для Docker API. Это также может быть сокет TCP, но по умолчанию из соображений безопасности Docker по умолчанию использует сокет UNIX.
Клиент Docker cli по умолчанию использует этот сокет для выполнения команд Docker. Вы также можете изменить эти настройки.
Могут быть разные причины, по которым вам может потребоваться монтировать сокет Docker внутри контейнера. Это как запуск новых контейнеров из другого контейнера. Или для автоматического обнаружения сервисов и ведения журнала. Это увеличивает поверхность атаки, поэтому вы должны быть осторожны, если вы монтируете сокет докера внутри контейнера, внутри этого контейнера работают доверенные коды, иначе вы можете просто скомпрометировать свой хост, на котором запущен демон докера, поскольку Docker по умолчанию запускает все контейнеры как root.
У сокета Docker есть группа докеров в большинстве установок, поэтому пользователи в этой группе могут запускать команды докеров против сокета докеров без разрешения root, но фактические контейнеры докеров по-прежнему получают разрешение root, поскольку демон docker эффективно работает как root (ему требуется разрешение root для доступа к пространству имен и cgroups) ,
Надеюсь, это ответ на ваш вопрос.
Дополнительная информация: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
внутри контейнера - обычная, но очень опасная практика. Злоумышленник может выполнить любую команду, которую может запустить служба докеров, которая обычно обеспечивает доступ ко всей хост-системе, поскольку служба докеров работает от имени пользователя root. "
Я знаю, что это немного поздно, но надеюсь, что мой ответ даст много идей
Позвольте мне сначала поговорить о сокетах Unix
Термин сокеты обычно относится к IP-сокетам. Это те, которые привязаны к порту (и адресу), мы отправляем TCP-запросы и получаем ответы.
Другой тип сокета - сокет Unix, эти сокеты используются для IPC (межпроцессного взаимодействия). Их также называют сокетами домена Unix ( UDS ). Сокеты Unix используют локальную файловую систему для связи, а сокеты IP используют сеть.
Демон Docker может прослушивать запросы API Docker Engine через три различных типа сокета: unix, tcp, and fd
.
По умолчанию сокет домена unix (или сокет IPC) создается в /var/run/docker.sock
Давайте посмотрим на несколько живых примеров :
Docker Server использует этот сокет для прослушивания REST API, а клиенты используют сокет для отправки запросов API на сервер.
curl может общаться с сокетом Unix через
--unix-socket
флаг. Поскольку Docker Server API представлен как REST, нам нужно будет отправлять команды через HTTP. Кроме того, поскольку этот сервер является локальным (помните, что файловая система), мы можем передать любое имя хоста в URL-адресе (или придерживаться локального хоста, это тоже будет работать нормально!). Сервер не заботится об имени хоста, а только о пути.
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
}
]
Некоторые команды :
С docker.sock можно много чего делать
посмотрите эту красивую статью