Diagnosis
sudo journalctl -k --since "5 minutes ago" | grep -i 'apparmor.*DENIED'
Look for apparmor="DENIED" followed by operation=... and
name=....
Fix
For development / debugging:
docker run --security-opt apparmor=unconfined myorg/app:1.0.0
For production, author a profile:
sudo apt-get install -y apparmor-utils
Create /etc/apparmor.d/docker.myorg-app:
#include <tunables/global>
profile docker.myorg-app flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
#include <abstractions/nameservice>
/usr/local/bin/app mr,
/etc/myorg/** r,
deny capability sys_admin,
}
Load:
sudo apparmor_parser -r /etc/apparmor.d/docker.myorg-app
Apply:
docker run --security-opt apparmor=docker.myorg-app myorg/app:1.0.0