我正在使用一个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
答案 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