Jenkins 如何在Docker容器中运行Docker主机?

Jenkins 如何在Docker容器中运行Docker主机?,jenkins,docker,boot2docker,Jenkins,Docker,Boot2docker,我在Docker中运行了一个Jenkins容器,我想在运行集成测试等时使用这个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 o

我在Docker中运行了一个Jenkins容器,我想在运行集成测试等时使用这个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。当我根据生成的图像在容器内启动bash terminal并执行以下操作时,例如:

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
    标志运行

    -我想没有

    3.-使用特权标志,您不需要将docker套接字作为卷装载


    查看所有这些的示例

    一个更简单的替代方法是挂载docker套接字并创建同级容器。为此,请在映像上安装docker并运行以下操作:

    docker run -it -v /var/run/docker.sock:/var/run/docker.sock myimage
    

    在容器中,您现在应该能够像在主机上一样运行docker命令。这种方法的优点是,您不需要
    --privileged
    ,并且可以从主机使用缓存。缺点是,您可以看到所有正在运行的容器,而不仅仅是从容器中创建的容器。

    如果我以root用户身份运行Jenkins容器,并且在Dockerfile的末尾不包含“CMD[“wrapdocker”]”,这一点就行得通。启动容器后,我需要手动运行“wrapdocker”。原因可能是Jenkins图像设置了一个入口点,如果我添加CMD[“wrapdocker”],该入口点似乎不起作用(容器不会启动)。因此,即使你已经回答了我的问题,它仍然不能按照我希望的方式工作,但我认为最好为这个问题创建另一个问题。这在ubuntu上运行良好,但对于debian:jessie,你需要libsqlite3-0包-else
    ldd$(哪个docker)
    显示
    libsqlite3.so.0=>未找到
    如果OSX上没有/var/run/docker.sock到fwd,这将如何工作?@dgorisen docker for Mac启动一个小型linux虚拟机来运行docker。这个虚拟机确实有/var/run/docker.sock。@AdrianMouat谢谢,我实际上在/private/var/run/docker.sock中找到了套接字,假设这是正确的one@AdrianMouat经过一番深思熟虑之后,结果证明您是对的,正确的路径是/var/run/docker.sock,这是从VM内部共享的。它不存在于主机上,但/private/var/run/docker.sock却存在于主机上,这一事实让我感到震惊。然而,后者不起作用。对于其他面临同样困惑的人,docker文档中的这一页最终帮助了我(名称空间部分):