Eu encontrei o mesmo problema hoje. Minha solução é desativar o selinux por "setenforce 0".
Eu tenho uma questão estranha aqui, onde eu não vejo o ponto que está errado.
Estou executando tudo em um contêiner docker na minha caixa Linux (Ubuntu 16.04 LTS):
docker run -ti --rm promregator/promregator:0.2.1 /bin/bash
(nota: a imagem está disponível publicamente via hub.docker.com
). O comando
docker version
(no host) retorna
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64
No contêiner, quero criar um arquivo como este:
promregator@6a68713fafc9:/$ cd /opt/promregator
promregator@6a68713fafc9:/opt/promregator$ touch test
touch: cannot touch 'test': Permission denied
(promregator é o usuário, com o qual a imagem é executada como padrão). Note que
O diretório é de propriedade do mesmo usuário e as permissões são 0750:
promregator@6a68713fafc9:/opt/promregator$ ls -al
total 34348
drwxr-x--- 2 promregator promregator 4096 Apr 1 01:00 .
drwxr-xr-x 5 root root 4096 Mar 20 01:01 ..
-rw-r----- 1 promregator promregator 35159385 Apr 1 00:59 promregator.jar
-rwxrwx--- 1 promregator promregator 642 Apr 1 00:57 promregator.sh
Numericamente, o usuário é de 1000
promregator@6a68713fafc9:/opt/promregator$ ls -aln .
total 34348
drwxr-x--- 2 1000 1000 4096 Apr 1 01:00 .
[...]
Note também que a mesma operação funciona em /home/promregator
:
promregator@6a68713fafc9:/opt/promregator$ cd /home/promregator
promregator@6a68713fafc9:~$ touch test
promregator@6a68713fafc9:~$ ls -al .
total 8
drwx------ 2 promregator promregator 4096 Apr 7 11:45 .
drwxr-xr-x 4 root root 4096 Apr 7 11:45 ..
-rw-r--r-- 1 promregator promregator 0 Apr 7 11:45 test
promregator@6a68713fafc9:~$ ls -aln .
total 8
drwx------ 2 1000 1000 4096 Apr 7 11:45 .
drwxr-xr-x 3 0 0 4096 Apr 7 11:45 ..
-rw-r--r-- 1 1000 1000 0 Apr 7 11:45 test
Observe que, se eu executar o container como root usando
docker run -ti --rm -u root promregator/promregator:0.2.1 /bin/bash
Eu posso criar o arquivo no primeiro local:
root@eb29fa8acb95:/# cd /opt/promregator/
root@eb29fa8acb95:/opt/promregator# touch test
Isso me diz que há algo "estranho" com o usuário promregator
.
Em um host diferente (comparei os IDs sha1 das imagens), o arquivo pode ser criado como esperado, se o contêiner tiver sido iniciado com docker run -ti --rm promregator/promregator:0.2.1 /bin/bash
. A informação da versão desse host indica
Client:
Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:11:19 2017
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:09:54 2017
OS/Arch: linux/amd64
Experimental: false
Alguma idéia, sugestão, ... para mim, o que isso poderia ser?
Obrigado antecipadamente!
Eu encontrei o mesmo problema hoje. Minha solução é desativar o selinux por "setenforce 0".
Tags permissions docker