====== 2022.03.16 Docker compose Permission denied ======
Docker composeでvoluemsを設定したとき、Permission deniedでアクセスできない場合がある。
===== docker-compose.yml =====
---
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./public:/usr/share/nginx/html
===== Permission denied =====
コンテナにログインして見ると対象に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
===== 対応 =====
==== 1. SElinuxを止める ====
setenforce 0
==== 2. zを付ける ====
volumes:
- ./public:/usr/share/nginx/html:z
=== Docker マニュアル抜粋 ===
SELinux のようなラベリング・システムでは、コンテナ内にマウントされたボリュームの内容に対しても、適切なラベル付けが行われます。
ラベルがなければ、コンテナの中の内容物を使って実行しようとしても、セキュリティ・システムがプロセスの実行を妨げるでしょう。
標準では、Docker は OS によって設定されるラベルに対して変更を加えません。
コンテナの内容物に対するラベルを変更するには、ボリュームのマウントにあたり、:z または :Z を末尾に付けられます(接尾辞)。
これらの指定をすると、Docker に対して共有ボリュームが再度ラベル付けされたものと伝えます。
{{tag>Docker 日記}}