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

tia*_*ldt 8 linux lxc docker

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.
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议安装docker的解决方法吗?

vaa*_*aab 18

是的,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守护程序.您可以通过发布manualy来测试它docker -d --exec-driver=lxc.在ubuntu中,要在启动时使用参数,只需编辑/etc/default/docker并确保您拥有该行: apparmor

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

如果您需要排除故障:

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

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


cre*_*ack 6

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

你可以看一下docker的makefile和hack/dind.您需要特权模式才能这样做.

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

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


Pit*_*kos 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
Run Code Online (Sandbox Code Playgroud)

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

备注:

  1. --privileged外部容器上需要该标志才能实现此目的.
  2. 你必须使用-v /var/lib/docker以避免creack提到的限制.
  3. ln -s /usr/bin/docker.io /usr/local/bin/docker只是创建一个符号链接,以便我们可以键入docker而不是docker.io

  • 我认为原始海报询问在LXC中运行Docker而不是在docker中运行Docker. (5认同)