简体   繁体   English

在 docker 容器内运行 docker?

[英]Run docker inside a docker container?

I am using a docker container to build and deploy my software to a collection of ec2's.我正在使用 docker 容器来构建我的软件并将其部署到 ec2 的集合中。 In the deployment script I build my software and then package it in a docker image.在部署脚本中,我构建了我的软件,然后将其打包到 docker 映像中。 The image is pushed to my private registry, pulled by my production ec2's and then run.映像被推送到我的私人注册表,由我的生产 ec2 拉取,然后运行。 So essentially I will need to run docker within a docker container.所以基本上我需要在 docker 容器中运行 docker。

The problem is that I can't actually start docker on my container.问题是我实际上无法在我的容器上启动 docker。 If I try如果我尝试

service docker start

I get我得到

bash: service: command not found

And if I try如果我尝试

docker -d

I get我得到

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

The service command doesn't exist on the docker container so I can't start docker. docker 容器上不存在 service 命令,因此我无法启动 docker。 I'm not sure what I should be doing now to start docker so I'm a bit stuck here, any help is appreciated.我不确定我现在应该做什么来启动 docker 所以我有点卡在这里,任何帮助表示赞赏。

A bit more information多一点信息

Host machine is running fedora 20 (will eventually be running amazon linux on an ec2)主机正在运行 fedora 20(最终将在 ec2 上运行 amazon linux)

Docker container is running centos 7.0 Docker 容器正在运行 centos 7.0

Host is running Docker version 1.2.0, build fa7b24f/1.2.0主机正在运行 Docker 版本 1.2.0,构建 fa7b24f/1.2.0

Container is running docker-0.11.1-22.el7.centos.x86_64容器正在运行 docker-0.11.1-22.el7.centos.x86_64

How about not running 'docker inside docker' and run docker on your host, but from within your docker container?不运行“docker inside docker”并在您的主机上运行 docker,而是从您的 docker 容器内运行怎么样? Just mount your docker.sock and docker binary:只需挂载您的 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 uses this approach to spin up docker containers, take a look at this image. https://github.com/sameersbn/docker-gitlab使用这种方法来启动 docker 容器,看看这张图片。

You can also take a look at: https://registry.hub.docker.com/u/mattgruter/doubledocker/你也可以看看: https : //registry.hub.docker.com/u/mattgruter/doubledocker/

UPDATE on july 2016 2016 年 7 月更新

The most current approach is to use docker:dind image, as described here: https://hub.docker.com/_/docker/最新的方法是使用docker:dind图像,如下所述: https docker:dind

Short summary:简短的摘要:

$ docker run --privileged --name some-docker -d docker:dind

and then: $ docker run --rm --link some-docker:docker docker info然后: $ docker run --rm --link some-docker:docker docker info : $ docker run --rm --link some-docker:docker docker info

While in almost all cases I would suggest following @cthulhu's answer and not running "docker in docker", in the cases when you must (eg a test suite which tests against multiple docker version), use the following to create additional loopback devices:虽然在几乎所有情况下,我都建议遵循 @cthulhu 的回答而不是运行“docker in docker”,但在您必须的情况下(例如,针对多个 docker 版本进行测试的测试套件),请使用以下内容创建额外的环回设备:

#!/bin/bash

for i in {0..6}
do
    mknod -m0660 /dev/loop$i b 7 $i
done

(Taken from the thread for Docker Issue #7058 ) (取自 Docker问题 #7058的线程)

You can simply run docker inside the docker container using dind .您可以使用dind容器内简单地运行dind Try this image from Jerome, as follows:试试 Jerome 的这张图片,如下:

docker run --privileged -t -i jpetazzo/dind

Check this page for more details:查看此页面了解更多详情:
https://github.com/jpetazzo/dind https://github.com/jpetazzo/dind

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

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