Файл Unix сокета /var/run/docker.sock
обычно создается демоном Docker. Если вы запустите что-то еще в качестве основного процесса контейнера, сокет не будет создан. Вы можете напрямую посмотреть, запустив контейнер с основным процессом, отличным от Docker, например /bin/ls
:
docker run --rm docker:19.03.12 ls -l /var/run
docker run --rm docker:19.03.12 ls -l /run
Двоичный файл /usr/bin/docker
должен существовать в файловой системе контейнера, если вы собираетесь используй это. Контейнеры никогда не могут вызывать двоичные файлы, находящиеся на хосте, и API сокетов также не будет создавать двоичные файлы. (Некоторые из самых ранних постов «использовать сокет хоста Docker» защищали привязку двоичного файла к контейнеру, но это приводит к проблемам с зависимостями библиотеки и делает изображения не самодостаточными.)
Итак, если все, что вам действительно нужно, это контейнер Docker с двоичным файлом docker
, который может вызывать сокет Docker хоста, вам понадобится изображение типа docker
, где изображение имеет /usr/bin/docker
, плюс вам нужно привязать /var/run/docker.sock
хоста к контейнеру.
docker run \
--rm \
-v /var/run/docker.sock:/var/run/docker.sock \
docker:19.03.12 \
docker ps
Настройка GitLab, на которую вы ссылаетесь, кажется довольно надуманной. Использование образа docker
для запуска заданий означает, что в значительной степени функция only , которую может выполнить шаг сборки, - это команда docker
. На техническом уровне вы не можете запустить контейнер docker
, не имея уже двоичного файла docker
и доступа к работающему демону Docker; подход оболочки-исполнителя, описанный в верхней части этой страницы, кажется более простым, и на самом деле у него нет никаких недостатков.
Вы также можете найти Docker изображение зависимостей времени сборки (компиляторы, файлы заголовков, средства проверки c, ...). Это позволит вам обновить эти зависимости без необходимости развертывать обновление для всего кластера сборки. Если ваши сценарии сборки сами должны вызывать docker
, тогда ваш образ инструментов сборки должен установить Docker, просто используя обычную команду RUN apt-get install
. Таким же образом вам необходимо подключить sh сокет хоста Docker к контейнеру, поэтому вам не нужно запускать отдельный демон Docker.