Могу ли я запустить Docker-in-Docker без использования флага -- privileged

Я хотел бы использовать настройки в Докер однако --privileged дает общий доступ к устройствам. Есть ли способ запустить это, используя комбинацию томов и cap-add и т. д. вместо?

2 ответов


к сожалению нет, вы должны использовать --privileged флаг для запуска Docker в Docker, вы можете взглянуть на официальные объявления где они заявляют, что это одна из многих целей --privileged флаг.

В основном, вам нужно больше доступа к устройствам хост-системы для запуска docker, чем вы получаете при работе без --privileged.


Да, вы можете запустить docker в docker без --privileged флаг. Он включает в себя установку сокета докера в контейнер следующим образом:

   docker run -it -v /var/run/docker.sock:/var/run/docker.sock \
               -v $(which docker):/bin/docker \
               alpine docker ps -a

это будет монтировать сокет docker и исполняемый файл в контейнер и запустить docker ps -a внутри альпийского контейнера. Жером Petazzoni, который является автором этого ничего пример и сделал много работы на --privileged флаг имел это сказать о docker в докер:

https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Я использую этот подход уже некоторое время, и он работает довольно хорошо.

нюанс при таком подходе все становится фанки с хранения. Лучше использовать контейнеры томов данных или именованные тома данных, а не монтировать каталоги. Поскольку вы используете сокет docker с хоста, любые каталоги, которые вы хотите смонтировать в дочернем контейнер должен быть из контекста хоста, а не родительского контейнера. Это становится странным. Мне больше повезло с контейнерами томов данных.