Подтвердить что ты не робот

Запустить докер в контейнере докера?

Я использую контейнер докеров для сборки и развертывания моего программного обеспечения в коллекции 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

4b9b3361

Ответ 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