繁体   English   中英

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

[英]How to run a Docker host inside a Docker container?

我在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终端时,例如:

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. 也许正如描述的,我应该代替链接到多克尔主机上这里

更新:我已经尝试使用root用户和jenkins容器。 没有安装sudo

更简单的替代方法是安装docker socket并创建兄弟容器。 为此,请在您的映像上安装docker并运行如下操作:

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

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

1.-您启动的第一个容器(您在其中启动另一个容器)必须使用--privileged=true标志运行。

2.-我认为没有。

3.-使用特权标志,您不需要将docker socket作为卷安装。

检查此项目以查看所有这些的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM