Я пытаюсь понять настоящую причину монтирования docker.sock
в docker-compose.yml
файл. Это для автообнаружения?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
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. "Я знаю, что это немного поздно, но надеюсь, что мой ответ даст много идей
Термин сокеты обычно относится к 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 на сервер.
Некоторые команды :
посмотрите эту красивую статью
источник
он в основном предоставляет контейнеру демон хоста docker. поэтому вы можете вызывать docker api / client из вашего контейнера, чтобы запускать / останавливать / создавать образы / контейнеры, например, напрямую вызывать эти команды на хосте.
источник