O SELinux impedirá que qualquer coisa que não esteja rotulada corretamente seja montada como um volume dentro de um contêiner docker, como prova, aqui usando um único arquivo, a mesma política se aplica aos diretórios:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 30
Usando o arquivo de amostra:
$ cat sample_script.sh
echo 'Hello, world'
Seu contexto de segurança padrão é:
$ ls -lrtZ sample_script.sh
-rw-------. 1 david david unconfined_u:object_r:user_home_t:s0 20 Oct 3 17:18 sample_script.sh
Tentar usar esse arquivo em um contêiner falha conforme o esperado:
$ docker run -v /home/david/sample_script.sh:/sample_script.sh --rm ubuntu bash sample_script.sh
bash: sample_script.sh: Permission denied
E uma negação de AVC será registrada:
$ sudo ausearch -m avc -ts recent
time->Mon Oct 3 17:39:28 2016
type=AVC msg=audit(1475512768.444:784): avc: denied { read } for pid=28720 comm="bash" name="sample_script.sh" dev="dm-13" ino=101062112 scontext=system_u:system_r:svirt_lxc_net_t:s0:c457,c992 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
Depois de alterar o contexto de segurança para um Docker, é possível usar:
$ sudo chcon -Rt svirt_sandbox_file_t sample_script.sh
$ ls -lrtZ sample_script.sh
-rw-------. 1 david david unconfined_u:object_r:svirt_sandbox_file_t:s0 20 Oct 3 17:18 sample_script.sh
O contêiner agora tem acesso ao arquivo:
$ docker run -v /home/david/sample_script.sh:/sample_script.sh --rm ubuntu bash sample_script.sh
Hello, world
Mais informações sobre o Docker e o SELinux no documentação oficial da Red Hat e este artigo por Dan Walsh.