2

这是我的Dockerfile

FROM ubuntu:14.04

RUN apt-get update

RUN apt-get install -y software-properties-common
RUN apt-get install -y python-software-properties

RUN add-apt-repository ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get install -y nodejs

RUN apt-get install -y apparmor-profiles
RUN apt-get install -y apparmor-utils

ADD server.js /folder1/
ADD usr.bin.nodejs /etc/apparmor.d/

RUN service apparmor reload

CMD node /folder1/server.js

这里是usr.bin.nodejs

#include <tunables/global>

/usr/bin/nodejs {
  #include <abstractions/base>

  /usr/bin/nodejs mr,
  /folder1/server.js r,
  /folder1/repo/** ralkmix,
  network,

}

我跑来sudo docker build -t scadge/test-one .构建这个图像。在Step 7 : RUN apt-get install -y apparmor-profiles我收到红色消息invoke-rc.d: policy-rc.d denied execution of startinvoke-rc.d: policy-rc.d denied execution of reload. 此外,Step 11 : RUN service apparmor reload我得到以下信息:

 * Reloading AppArmor profiles
 * Mounting securityfs on /sys/kernel/security...
mount: permission denied
    ...fail!
    ...fail!

..确定apparmor配置文件不起作用。那么如何让 AppArmor 在 Docker 中工作呢?我还想承认,所有这些东西在我的桌面 Ubuntu 14.04 上都可以正常工作,从官方网站下载。

4

1 回答 1

3

首先是免责声明。你不想这样做!

因为在容器中重新加载 AppArmor 配置文件会在主机中重新加载它们

这是因为 Docker 容器与主机共享正在运行的 Linux 内核。

容器本身已经使用/etc/apparmor.d/docker配置文件 BTW 进行了限制。


现在,如果您确实确定要从容器中加载主机 AppArmor 配置文件...

问题很明显,AppArmor 无法挂载 securityfs。

您可以使用该--privileged选项启用挂载。

您还可以使用以下SYS_ADMIN 功能启用它:

docker run --cap-add=SYS_ADMIN debian:jessie sh -c 'mount -t securityfs none /mnt && echo Done!'

如果您使用该SYS_ADMIN选项,那么您必须在主机上/etc/apparmor.d/docker编辑配置文件并注释掉所有涉及分支的行。deny/sys/kernel

同样,这很可能不是您想要做的事情。

于 2014-11-20T00:23:36.520 回答