如何在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 

所以我的问题是:

  1. 我如何真正启动一个容器内的Docker主机? 或者这是应该避免的吗?
  2. 如果我运行Mac和boot2docker,有什么特别的我需要做的?
  3. 也许我应该链接到主机上的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的容器。