web-dev-qa-db-ja.com

Dockerコンテナー内でdockerを実行しますか?

Dockerコンテナを使用して、ソフトウェアを構築し、ec2のコレクションに展開しています。展開スクリプトでは、ソフトウェアをビルドし、Dockerイメージにパッケージ化します。イメージはプライベートレジストリにプッシュされ、実稼働ec2によってプルされ、実行されます。したがって、本質的には、Dockerコンテナ内でdockerを実行する必要があります。

問題は、実際にコンテナでdockerを起動できないことです。私が試してみると

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

サービスコマンドがdockerコンテナに存在しないため、dockerを起動できません。 Dockerを起動するために今何をすべきかわからないので、ここで少し立ち往生しています。どんな助けもありがたいです。

もう少し情報

ホストマシンはFedora 20を実行しています(最終的にはec2でAmazon linuxを実行します)

Dockerコンテナはcentos 7.0を実行しています

ホストはDockerバージョン1.2.0、ビルドfa7b24f/1.2.0を実行しています

コンテナはdocker-0.11.1-22.el7.centos.x86_64を実行しています

27
Colin Murphy

'docker inside docker'を実行せず、ホストでdockerを実行するのではなく、dockerコンテナ内から実行するのはどうですか? docker.sockとdocker binaryをマウントするだけです:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]

https://github.com/sameersbn/docker-gitlab は、このアプローチを使用してdockerコンテナーを起動します。この画像を見てください。

以下もご覧ください: https://registry.hub.docker.com/u/mattgruter/doubledocker/

2016年7月の更新

ここで説明するように、最新のアプローチは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

40
cthulhu

ほとんどすべての場合、@ cthulhuの回答に従うことと、(docker in docker)を実行するnotをお勧めしますが、必要な場合(テストスイートなど)複数のdockerバージョンに対してテストします)、次を使用して追加のループバックデバイスを作成します。

#!/bin/bash

for i in {0..6}
do
    mknod -m0660 /dev/loop$i b 7 $i
done

(Dockerのスレッドから取得 問題#7058

3
lsowen

dindを使用して、Dockerコンテナ内でdockerを実行するだけです。次のように、ジェロームのこの画像を試してください。

docker run --privileged -t -i jpetazzo/dind

詳細については、このページを確認してください。
https://github.com/jpetazzo/dind

2
Sabin