Запуск докера всередині Docker (aka dind ), хоча це можливо, слід уникати, якщо це можливо. (Джерело надано нижче.) Натомість ви хочете створити спосіб, щоб ваш основний контейнер виробляв та спілкувався з контейнерами для братів .
Джером Петаццоні - автор функції, яка дозволила Докеру запуститись у контейнер Докера - насправді написав допис у блозі, в якому заявив, що цього не робити . Випадок використання, який він описує, відповідає точному випадку використання OP контейнера CI Docker, який повинен запускати завдання всередині інших контейнерів Docker.
Petazzoni перераховує дві причини, чому dind клопітно:
- Він не дуже добре співпрацює з модулями безпеки Linux (LSM).
- Це створює невідповідність файлових систем, що створює проблеми для контейнерів, створених всередині батьківських контейнерів.
З цієї публікації в блозі він описує таку альтернативу,
[Найпростіший спосіб - просто виставити гніздо Docker на ваш контейнер CI, прив’язавши його до -v
прапора.
Простіше кажучи, коли ви запускаєте контейнер CI (Jenkins або інший), замість того, щоб щось зламати разом із Docker-in-Docker, почніть його з:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
Тепер цей контейнер матиме доступ до гніздо Docker, тому він зможе запускати контейнери. За винятком того, що замість запуску "дитячих" контейнерів, він запустить контейнери "побратими".