Docker composeでvoluemsを設定したとき、Permission deniedでアクセスできない場合がある。
--- version: '3' services: nginx: image: nginx:latest ports: - "8080:80" volumes: - ./public:/usr/share/nginx/html
コンテナにログインして見ると対象にPermission deniedでアクセスできない。
もしファイルを直接指定しても、ハテナになってしまいます。
# docker exec -it app-nginx-1 bash root@a107d04ed12b:/# ls -al /usr/share/nginx/html/ ls: cannot open directory '/usr/share/nginx/html/': Permission denied root@a107d04ed12b:/# ls /usr/share/nginx/html/ -al ls: cannot access '/usr/share/nginx/html/index.html': Permission denied total 4 drwxr-xr-x. 2 root root 40 Mar 1 13:59 . drwxr-xr-x. 3 root root 18 Mar 1 13:59 .. -rw-r--r--. 1 root root 497 Jan 25 15:03 50x.html -?????????? ? ? ? ? ? index.html
setenforce 0
volumes: - ./public:/usr/share/nginx/html:z
SELinux のようなラベリング・システムでは、コンテナ内にマウントされたボリュームの内容に対しても、適切なラベル付けが行われます。 ラベルがなければ、コンテナの中の内容物を使って実行しようとしても、セキュリティ・システムがプロセスの実行を妨げるでしょう。 標準では、Docker は OS によって設定されるラベルに対して変更を加えません。 コンテナの内容物に対するラベルを変更するには、ボリュームのマウントにあたり、:z または :Z を末尾に付けられます(接尾辞)。 これらの指定をすると、Docker に対して共有ボリュームが再度ラベル付けされたものと伝えます。