Запустить докер в контейнере докера?
Я использую контейнер докеров для сборки и развертывания моего программного обеспечения в коллекции ec2. В развертывании script я создаю свое программное обеспечение, а затем упаковываю его в образ докеры. Изображение переместится в мой частный реестр, вытащил мое производство ec2, а затем запустил. Поэтому по существу мне нужно будет запустить докер в контейнере докера.
Проблема в том, что я не могу на самом деле запустить докер в моем контейнере. Если я попробую
service docker start
Я получаю
bash: service: command not found
И если я попробую
docker -d
Я получаю
2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver:
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock)
[e2feb6f9] +job initserver()
[e2feb6f9.initserver()] Creating server
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock)
[error] attach_loopback.go:42 There are no more loopback device available.
loopback mounting failed
[e2feb6f9] -job initserver() = ERR (1)
2014/10/07 15:54:35 loopback mounting failed
Сервисная команда не существует в контейнере докера, поэтому я не могу запустить докер. Я не уверен, что я должен делать сейчас, чтобы начать докер, поэтому я немного застрял здесь, любая помощь приветствуется.
Немного больше информации
Хост-компьютер работает на базе fedora 20 (в конечном итоге будет запущен linux amazon на ec2)
Докер-контейнер работает centos 7.0
В хосте работает Docker version 1.2.0, build fa7b24f/1.2.0
Контейнер работает docker-0.11.1-22.el7.centos.x86_64
Ответы
Ответ 1
Как насчет того, чтобы не запускать "docker inside docker" и запускать докеры на вашем хосте, но из вашего контейнера докеров? Просто установите docker.sock и docker:
docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]
https://github.com/sameersbn/docker-gitlab использует этот подход для разворачивания контейнеров докеров, взгляните на это изображение.
Вы также можете взглянуть на: https://registry.hub.docker.com/u/mattgruter/doubledocker/
UPDATE от 2016 года
Самый современный подход - использовать образ docker:dind
, как описано здесь:
https://hub.docker.com/_/docker/
Краткое описание:
$ docker run --privileged --name some-docker -d docker:dind
а затем:
$ docker run --rm --link some-docker:docker docker info
Ответ 2
Хотя почти во всех случаях я предлагаю следующий ответ @cthulhu и не запускать "docker in docker", в тех случаях, когда вы должны (например, тестовый набор, который тестирует несколько версий докеров), используйте следующее для создания дополнительной петлевой проверки устройства:
#!/bin/bash
for i in {0..6}
do
mknod -m0660 /dev/loop$i b 7 $i
done
(Взято из потока для Docker Проблема # 7058)
Ответ 3
Вы можете просто запустить докер внутри контейнера докера, используя dind
. Попробуйте это изображение из Джерома, как показано ниже:
docker run --privileged -t -i jpetazzo/dind
Проверьте эту страницу для получения более подробной информации:
https://github.com/jpetazzo/dind