如何在Docker容器中运行Docker主机?
我有一个运行在Docker中的Jenkins容器,我想在运行集成testing时使用这个Jenkins容器来启动其他Docker容器。
所以我的计划是在容器中安装Docker,但是这对我来说似乎并没有那么好。 我的Dockerfile看起来像这样:
FROM jenkins MAINTAINER xxxx # Switch user to root so that we can install apps USER root RUN apt-get update # Install latest version of Docker RUN apt-get install -y apt-transport-https RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 RUN sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list" RUN apt-get update RUN apt-get install -y lxc-docker # Switch user back to Jenkins USER jenkins
jenkins
形象是基于Debian Jessie。 当我根据生成的图像启动容器内的bashterminal时,例如:
docker images
我收到以下错误信息:
FATA[0000] Get http:///var/run/docker.sock/v1.16/images/json: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
我怀疑这可能是因为docker服务没有启动。 但是当我尝试启动服务时,出现了下一个问题:
service docker start
这给了我以下错误:
mount: permission denied
我已经跟踪了/etc/init.d/docker
中的这个错误:
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
所以我的问题是:
- 我如何真正启动一个容器内的Docker主机? 或者这是应该避免的吗?
- 如果我运行Mac和boot2docker,有什么特别的我需要做的?
- 也许我应该链接到主机上的Docker,如下所述?
更新:我已经尝试容器作为用户root和jenkins。 sudo
没有安装。
1.-您启动的第一个容器(您启动另一个容器的容器)必须以--privileged=true
标志运行。
2.-我觉得没有。
3.-使用特权标志,您不需要将docker套接字作为卷装入。
检查这个项目看到这一切的一个例子。
更简单的select是安装docker socket并创build同级容器。 为此,请在您的映像上安装docker,并运行如下所示的代码:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage
在容器中,您现在应该能够像在主机上一样运行docker命令。 这种方法的优点是你不需要 – --privileged
并从主机使用caching。 缺点是可以看到所有正在运行的容器,而不仅仅是容器创build的容器。
- 如何获取jenkinsdocker集装箱的IP地址?
- 请求URL中没有主机 – docker组成up -d
- 为什么在“192.168.1.1:53:dialup tcp:lookup cdn-registry-1.docker.io:read udp 192.168.1.1:53:I / O timeout”时推送Docker镜像失败?
- 在Windows上使用Vagrant的docker提供程序的Rsync“权限被拒绝”错误
- Docker守护进程启动失败
- 在Windows上的Docker工具箱卷不会刷新容器上的更改
- 风筝安装错误docker工具
- 代理下的boot2docker返回Forbidden
- 在安装了Mono的Ubuntu映像的Dockerfile中构build时出错