这是我的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 start
和invoke-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(从官方站点下载)上正常工作。
最佳答案
首先是免责声明。你不想这样做!
因为重装了容器中的AppArmor配置文件,所以将它们重载到了主机中!
这是因为Docker容器与主机共享正在运行的Linux内核。
容器本身已经使用/etc/apparmor.d/docker
配置文件BTW进行了限制。
现在,如果您真的确定要从容器中加载主机AppArmor配置文件...
问题很明显,AppArmor无法安装securityfs。
您可以使用--privileged
选项启用挂载。
You can also enable it和SYS_ADMIN
capability:
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
行。同样,这很可能不是您想要执行的操作。
关于ubuntu - 无法在Docker中重新加载或启动AppArmor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25533666/