docker可以在Linux容器内运行吗?

时间:2014-02-28 03:34:50

标签: linux docker lxc

Koding是一个协作编程环境,它为多个用户创建一个虚拟机,以协作进行软件开发。他们使用Linux Containers来虚拟化机器。我无法在其上安装docker:

tiagoboldt@vm-2:~$ sudo docker build -t mongo .       
[sudo] password for tiagoboldt:          
Uploading context 645.1 kB
Uploading context 
Step 0 : FROM ubuntu:latest                                                                                                                                                                                      
Pulling repository ubuntu                                                                                                                                                                                        
9cd978db300e: Error pulling image (latest) from ubuntu, endpoint: https://cdn-registry-1.docker.io/v1/, Driver aufs failed to get image rootfs 6170bb7b0ad1003a827e4dc5253ba49f6719599eac485db51eaafd507c13c311: 
9cd978db300e: Error pulling image (latest) from ubuntu, Driver aufs failed to get image rootfs 6170bb7b0ad1003a827e4dc5253ba49f6719599eac485db51eaafd507c13c311: permission denied                               
6170bb7b0ad1: Error downloading dependent layers                                                                                                                                                                 

2014/02/28 03:32:55 build: pull: Could not find repository on any of the indexed registries.

有人可以建议安装docker的解决方法吗?

5 个答案:

答案 0 :(得分:17)

是的,docker可以在linux容器中运行。

但是,docker只能使用lxc执行驱动程序和 unconfined lxc运行。

所以,这里是如何在LXC中获得docker:

  1. 确保您在LXC的lxc.aa_profile = lxc-container-default-with-nesting文件中lxc.aa_profile = unconfined(如果无法使用此配置文件,请尝试config)以确保它不会被apparmor阻止。有关详细信息,请访问(或修改)/etc/apparmor.d/lxc

  2. 中的文件
  3. 您需要在容器中安装lxc。例如,如果你在ubuntu下,请运行容器apt-get install lxc

  4. 确保使用--exec-driver=lxc参数调用docker守护程序。您可以先发布manualy docker -d --exec-driver=lxc进行测试。在ubuntu中,要在启动时使用参数,只需编辑/etc/default/docker并确保您拥有该行: DOCKER_OPTS="--exec-driver"

  5. 按照此主题进行更新:https://github.com/docker/docker/issues/6783

    如果您需要进行问题排查:

    • 密切关注主机kern日志中的apparmor日志。
    • 手动启动docker -d ...以获得输出。

    注意:您可能无法通过判断其他人的答案来帮助主机修改Koding上的LXC apparmor脚本,无论如何,如果您是LXC提供商,这个如何仍然感兴趣,它会回答您更常见的问题。在你的问题标题中提到,这可能会在更一般的场景中吸引人们(就像我一样)。

答案 1 :(得分:6)

这是同一船上其他人的完整指南。

启动终端并开始输入..

docker run -i -t --privileged -v /var/lib/docker ubuntu bash
apt-get update && apt-get install -y docker.io
service docker.io start
ln -s /usr/bin/docker.io /usr/local/bin/docker
docker run -i -t ubuntu bash

现在你应该在另一个容器内的容器内。

说明:

  1. 外部容器上需要标记--privileged才能完成此操作。
  2. 您必须使用-v /var/lib/docker来避免creack提到的限制。
  3. ln -s /usr/bin/docker.io /usr/local/bin/docker只是创建一个符号链接,以便我们可以输入docker而不是docker.io

答案 2 :(得分:5)

是的,有可能。但是,您不能将aufs分区嵌套在aufs中。您需要安装其他系统或使用不同的存储后端。

您可以查看docker的makefile和hack/dind。您需要特权模式才能这样做。

最简单的尝试方法是执行make shell,一旦在容器中,您就可以启动一个新的docker守护程序:)

编辑:我试过Koding,但确实不可能。您在其容器中没有特权,因此您无法启动新的docker。

答案 3 :(得分:2)

是。请参阅此博文:http://blog.docker.io/tag/inception/

您必须以特权模式启动容器。

docker run -privileged -t -i jpetazzo/dind

答案 4 :(得分:2)

您可以在Terminal.com内执行此操作。

只需启动终端,然后运行:https://blog.terminal.com/docker-without-containers-pulldocker/

注意:我在Terminal.com工作。我们使用容器技术的非LXC,非libcontainer实现(例如,它没有AUFS的限制)。我们正在尝试制作像完整Linux机器一样的容器,我想我们就在那里。尝试一下。