2014-10-16 120 views
7

这里是我的问题:我想在码头集装箱内部建立一个chroot环境。问题是debootstrap的无法运行,因为它不能在chroot proc挂载:码头集装箱内的debootstrap

W: Failure trying to run: chroot /var/chroot mount -t proc proc /proc

(在日志中的问题真可谓是:mount: permission denied

如果我run --privileged容器,它(当然)的作品... 我真的很喜欢debootstrap Dockerfile中的chroot(非常干净)。有什么方法可以让它起作用吗?

非常感谢!

回答

0

简短的回答,没有特权模式没有没有办法。

Docker面向微型服务,并不代替虚拟机。在一个容器中进行多次安装绝对不符合这个要求。为什么不使用多个码头集装箱?

+0

我建立了运行代码片段(主要是学生对习题的解答)到笼环境中的应用程序。我同时运行了几百个node.js脚本,我发现最好的解决方案是chroot + aufs(我最初试图用docker作为执行框,但有一些限制,比如不能在控制器之间共享文件描述符过程和产卵的笼养儿童,我用它们为IPC)。我以前都是在Virtualbox机器上做这件事,但现在我正试图利用真棒码头生态系统(配置,部署等)。 – fbrusch 2014-10-16 16:13:50

+1

我不清楚为什么你说'文件描述符',而不是文件...但你可以在共​​享卷容器间共享文件 – Rondo 2014-10-18 02:52:13

+1

请回答这个问题,而不是抱怨为什么人们需要这样做。有时你不能选择你的工具,需要做些事情。有时你只是想了解它。 – hazydev 2016-01-07 00:17:10

3

不,目前不可能。

Issue #1916(涉及在docker build期间运行特许操作)仍然是一个未解决的问题。有人曾经讨论过增加一个命令行标志和RUNP命令,但都没有实现。

1

您可以使用debootstrap的的fakechroot变种,如:

fakechroot fakeroot debootstrap --variant=fakechroot ... 

干杯!

0

--cap-add=SYS_ADMIN --security-opt apparmor:unconfined添加到docker run命令适用于我。

moby/moby issue 16429