Відповіді:
docker.sock
- це розетка UNIX, яку слухає демон Докера. Це головна точка входу для API Docker. Це також може бути TCP-сокет, але за замовчуванням з міркувань безпеки Docker за замовчуванням використовує UNIX-сокет.
Клієнт Docker cli використовує цей сокет для виконання команд докер за замовчуванням. Ви також можете змінити ці налаштування.
Можливо, можуть бути різні причини, чому вам може знадобитися монтувати гніздо Docker всередині контейнера. Як і запуск нових контейнерів з іншого контейнера. Або для автоматичного пошуку та обслуговування журналу. Це збільшує поверхню атаки, тому вам слід бути обережними, якщо ви встановлюєте докер-сокет всередині контейнера, у ньому зберігаються довірені коди, інакше ви можете просто скомпрометувати хоста, який працює демона docker, оскільки Docker за замовчуванням запускає всі контейнери як root.
Docker socket має групу докерів у більшості інсталяцій, тому користувачі цієї групи можуть запускати команди докера проти докерного сокета без дозволу кореня, але фактичні контейнери докера все одно отримують дозвіл на root, оскільки демон-докер працює ефективно як root (йому потрібен кореневий дозвіл на доступ до простору імен та груп) .
Я сподіваюся, що він відповість на ваше запитання.
Більше інформації: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
всередині контейнера є звичайною, але дуже небезпечною практикою. Зловмисник може виконати будь-яку команду, яку може виконувати служба докера, яка, як правило, забезпечує доступ до всієї системи хостів, оскільки служба докера працює як root. "
Я знаю це трохи пізно, але сподіваюся, що моя відповідь дасть стільки розумінь
Дозвольте спочатку поговорити про Unix Sockets
Термін Sockets зазвичай відноситься до IP Sockets. Це ті, які прив’язані до порту (та адреси), на який ми надсилаємо TCP-запити та отримуємо відповіді.
Іншим типом Socket є Unix Socket, ці розетки використовуються для IPC (Interprocess Communication). Їх також називають Unix Domain Sockets ( UDS ). Unix Sockets використовує локальну файлову систему для зв'язку, тоді як IP Sockets - мережу.
Демон Docker може прослуховувати запити API Docker Engine через три різних типи сокета: unix, tcp, and fd
.
За замовчуванням Unix доменного сокета (або IPC-сокета) створюється за адресою /var/run/docker.sock
Давайте подивимося кілька живих прикладів :
Docker Server використовує цей сокет для прослуховування API REST, а клієнти використовують сокет для надсилання запитів API на сервер.
curl може говорити з Unix Socket через
--unix-socket
прапор. Оскільки API Docker Server виставляється як REST, нам потрібно буде надсилати команди через HTTP. Крім того, оскільки цей сервер є локальним (пам’ятайте, файлова система), ми можемо передавати будь-яке ім’я хоста в URL-адресі (або дотримуватися localhost, який також буде добре працювати!). Сервер не піклується про ім’я хоста, лише про шлях.
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 ви можете багато чого зробити
перевірити цю прекрасну статтю