12

Koding是一个协作编程环境,它为多个用户创建一个虚拟机来协作进行软件开发。他们使用 Linux 容器来虚拟化机器。我无法在其上安装 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的解决方法吗?

4

5 回答 5

22

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

但是 docker 只会在lxc执行驱动程序和无限制的lxc 中运行。

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

  1. 确保您的 LXC 文件中有lxc.aa_profile = lxc-container-default-with-nesting(如果它不起作用或您没有此配置文件,请尝试lxc.aa_profile = unconfined),config以确保它不会被apparmor. 有关更多信息,请访问(或修改)/etc/apparmor.d/lxc.

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

  3. 确保使用--exec-driver=lxc参数调用 docker 守护程序。您可以通过手动发出之前对其进行测试docker -d --exec-driver=lxc。在 ubuntu 中,要在启动时使用参数,只需编辑/etc/default/docker并确保您有以下行:

DOCKER_OPTS="--exec-driver=lxc"

按照此线程进行更新:https ://github.com/docker/docker/issues/6783

如果您需要排除故障:

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

注意:您可能无法通过判断其他人的答案来修改 Koding 上的 LXC apparmor 脚本,无论如何,如果您是 LXC 提供者,这个方法仍然很有趣,它回答了您在您的问题的标题,这可能会在更一般的情况下吸引人们(就像我一样)。

于 2014-09-17T08:25:57.510 回答
6

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

您可以查看 docker 的 makefile 和hack/dind. 您需要特权模式才能执行此操作。

最简单的尝试方法是make shell,一旦进入容器,您就可以启动一个新的 docker daemon :)

编辑:我尝试了 Koding 并且确实不可能。您在他们的容器中没有特权,因此您无法启动新的 docker。

于 2014-03-01T01:52:12.790 回答
5

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

启动终端并开始输入..

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
于 2014-08-07T09:26:30.803 回答
1

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

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

docker run -privileged -t -i jpetazzo/dind
于 2014-03-01T03:49:13.517 回答
1

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

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

注意:我为 Terminal.com 工作。我们使用容器技术的非 LXC、非 libcontainer 实现(例如,它没有 AUFS 的限制)。我们正在尝试制造像完整的 Linux 机器一样运行的容器,我认为我们已经做到了。试试看。

于 2015-03-16T21:19:51.817 回答