Могу ли я запустить 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 с хоста, любые каталоги, которые вы хотите смонтировать в дочернем контейнер должен быть из контекста хоста, а не родительского контейнера. Это становится странным. Мне больше повезло с контейнерами томов данных.