#docker #docker-in-docker
Вопрос:
Мне нужно создать образ ubuntu, а затем запустить процесс сборки с использованием этого образа. Все хорошо, пока сборка не дойдет до выполнения docker build
и т. Д.
Допустим, я использую следующее, чтобы проверить это:
Докерфайл
FROM ubuntu:latest
Затем я создаю это — docker build -t ubuntudkr .
Затем я запускаю его, как:
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock ubuntudkr
Когда я затем запускаю docker ps
внутри этого контейнера, я получаю сообщение об ошибке bash: docker: command not found
Все примеры, которые я нашел, говорят, что мне нужно запустить:
docker run -v /var/run/docker.sock:/var/run/docker.sock
-ti docker
Все они используют образ docker, содержащий библиотеку docker. Является ли мой ответ тогда установить docker внутри моего базового образа, чтобы заставить его работать? Разве это не противоречит тому, что говорят сами докеры?
Есть много других сообщений в блогах, которые давали те же советы, но мой пример действительно работает. Где я ошибаюсь?
Комментарии:
1. В общем случае образ Docker должен быть автономным; если вашему приложению требуется
docker
двоичный файл, то файл Docker необходимо установить в той или иной форме. (Но также помните, что возможность доступа к сокету Docker означает, что вы можете довольно просто запустить весь хост; вам нужно запускать больше контейнеров внутри контейнера или вы можете использовать более безопасный подход?)2. другие контейнеры не будут запущены, нет. Это для среды сборки CI, поэтому нужно только запустить сборку docker, и будут запущены команды docker run publish.
Ответ №1:
Замените изображение ubuntu:latest
в файле dockerfile официальным docker:latest
изображением, которое содержит двоичные файлы docker и делает именно то, что вы хотите: https://hub.docker.com/_/docker
Если вы хотите сохранить образ Ubuntu, вы должны установить инструменты Docker после вашей ошибки. По умолчанию образ Ubuntu не содержит двоичных файлов Docker, как при обычной установке Ubuntu.