Por que meu contêiner Docker não consegue gravar em um diretório de host montado?

1

Estou executando um contêiner do Docker usando o seguinte comando:

sudo docker run --name=bamboo-server -p 8085:8085 -p 54663:54663 -v /data/bamboo-server:/home/bamboo hwuethrich/bamboo-server

Eu quero que /home/bamboo no contêiner seja mapeado para /data/bamboo-server . No entanto, meu contêiner não pode gravar no diretório mapeado. Isso funciona bem no host:

[walt@walt bamboo]$ touch /data/test.txt

Mas não do contêiner:

[walt@walt bamboo]$ sudo docker exec bamboo-server touch /home/bamboo/test.txt
touch: cannot touch '/home/bamboo/test.txt': Permission denied

As permissões do diretório /data são todas codificadas para 777:

[walt@walt bamboo]$ ls -la /data/
total 0
drwxrwxrwx.  3 root root  43 May  6 02:29 .
dr-xr-xr-x. 18 root root 248 Apr 30 14:16 ..
drwxrwxrwx.  2 root root   6 May  6 01:50 bamboo-server
-rw-rw-r--.  1 walt walt   0 May  6 02:29 test.txt

[walt@walt bamboo]$ ls -la /data/bamboo-server/
total 0
drwxrwxrwx. 2 root root  6 May  6 01:50 .
drwxrwxrwx. 3 root root 43 May  6 02:29 ..

Outras informações de depuração:

[walt@walt bamboo]$ sudo docker exec bamboo-server whoami
root

[walt@walt bamboo]$ sudo docker -v
Docker version 1.9.1, build ee06d03/1.9.1

[walt@walt bamboo]$ df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       1.9T   33M  1.9T   1% /data

Obrigado!

    
por jSepia 06.05.2016 / 11:41

1 resposta

1

Você está usando o Docker em um sistema com o SELinux instalado e impondo.

No SELinux, os arquivos que devem ser compartilhados do host para o container devem receber o contexto apropriado do SELinux, svirt_sandbox_file_t .

Você precisa configurar o contexto de arquivo apropriado:

semanage fcontext -a -t svirt_sandbox_file_t "/data(/.*)?"

Em seguida, redefina os contextos dos arquivos:

restorecon -r -v /data
    
por 06.05.2016 / 11:54

Tags