状況
USER app(UID 1000)で動くコンテナを -v ./data:/data で起動すると EACCES: permission denied, open '/data/app.db'。exec で id は uid=1000、ホストで ls -ln すると data の所有者は 0 0、権限は drwxr-xr-x。
最も適切な対処は?
- Aホストの ./data を chmod -R 777 にする
- Bコンテナを --privileged 付きで起動する
- CUSER を消して、コンテナを root で動かす
- Dホストの ./data の所有者を UID 1000 に合わせる
正答
- A
- B
- C
- D
解説
バインドマウントでは、ホストのディレクトリの所有者と権限がそのままコンテナから見える。所有者が UID 0(root)で drwxr-xr-x なら、UID 1000 のプロセスは書き込めない。ホスト側で chown 1000:1000 ./data として、コンテナのプロセスの UID に合わせるのが筋の通った直し方。777(A)は誰でも書き換えられる状態にし、root で動かす(C)は一般ユーザーで動かす安全策を捨てる。どちらも書き込めるようにはなるが、権限を必要以上に広げる。--privileged(B)はコンテナにホストの広い権限を与えるもので、ファイルの所有者の問題は解決しない。
参考: docs.docker.com
この問題を含む Docker のテストを制限時間つきで解く
Dockerクイズへ