在docker容器内运行docker?

时间:2014-10-07 15:02:21

标签: centos docker fedora

我正在使用一个docker容器来构建我的软件并将其部署到ec2的集合中。在部署脚本中,我构建了我的软件,然后将其打包在docker镜像中。图像被推送到我的私人注册表,由我的生产ec2'然后运行。所以基本上我需要在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。我不知道我现在要做什么才能启动码头工具,所以我有点卡在这里,感谢任何帮助。

更多信息

主机正在运行fedora 20(最终将在ec2上运行amazon linux)

Docker容器正在运行centos 7.0

主机正在运行Docker 1.2.0版,构建fa7b24f / 1.2.0

Container正在运行docker-0.11.1-22.el7.centos.x86_64

3 个答案:

答案 0 :(得分:39)

如何在你的主机上运行'docker in docker'并在你的docker容器中运行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使用这种方法来启动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

答案 1 :(得分:3)

虽然在几乎所有情况下我都会建议关注@ cthulhu的答案和在docker"中运行" docker,在你必须的情况下(例如测试)测试多个docker版本的套件,使用以下内容创建其他回送设备:

#!/bin/bash

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

(取自Docker Issue #7058的主题)

答案 2 :(得分:2)

您只需使用dind在docker容器内运行docker即可。试试Jerome的这张图片,如下:

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

查看此页面了解更多详情:
https://github.com/jpetazzo/dind