問題
container内で作ったfileのownerがrootになる
[user1:~/] $ docker run -it --rm -v $PWD:/work -w /work busybox touch hoge
[user1:~/] $ ls -l
-rw-r--r-- 1 root root 0 Oct 13 22:22 hoge
user1で作業したいのにいきなりrootのpermissionになってしまった。こまる。
対策1. docker-run -u option
$ docker run -u $(id -u):$(id -g)
問題点
- conateiner内ではrootとして扱いたい
対策2. Rootless dockerを使う
形としてはきれい。将来的にはこれが良いと思う。
via: https://github.com/moby/moby/blob/master/docs/rootless.md
問題点
実験的。
異常に遅い。
docker run busyboxに20s。
docker buildの1stepに最低20s。
使い物にならない。バグだろうか?
追記: 遅くないときもある。マシンの構成かInstallの仕方か。
対策3. userns-remapを使う
前提
- サーバー管理者である
- dockerを使わせる一般ユーザーは一人とする
手順
debian stretchの例
- 一般ユーザーのuid:1000 gid:1001とする
$ sudo vi /etc/docker/daemon.json
/etc/docker/daemon.json
+{
+ "userns-remap": "default"
+}
$ sudo systemctl restart docker
$ sudo vi /etc/subuid
/etc/subuid
- dockremap:10000:65536
+ dockremap:1000:65536
$ sudo vi /etc/subgid
/etc/subgid
- dockremap:10000:65536
+ dockremap:1001:65536
$ sudo systemctl restart docker
確認
[user1:~/] $ docker run -it --rm -v $PWD:/work -w /work busybox sh
/work # touch hogehoge
/work # ls -l
-rw-r--r-- 1 root root 0 Oct 13 22:37 hogehoge
/work # exit
[user1:~/] $ ls -l
-rw-r--r-- 1 user1 user1 0 Oct 13 22:37 hogehoge
verygood!! :)
参考
- https://stackoverflow.com/questions/35291520/docker-and-userns-remap-how-to-manage-volume-permissions-to-share-data-betwee
- https://docs.docker.com/engine/security/userns-remap/
問題点
- 色々前提が多い
- 一部機能に制限がある
- マルチユーザーでdockerを利用できない(rootも無理)
対策?4. Docker Desktop for Macを使う
- なにもしないでも望み通りの挙動になっている
- Docker用Linux <-> Mac 間マウントで都合のいいことになったと予想
問題点
- ない
Windows編
Docker desktop for windows, wsl2 環境
問題
windowsは、rootユーザーという概念がないので問題が発生しない。
しかし、wsl2でdocker以外のディストリビューションを入れていた場合(ex: ubuntu)に、やはりownerがrootになってしまう。使い物にならない。
対策5
wsl2とwindowsのマウントの設定を変更する。
$ wsl -d docker-desktop
[wsl(docker-desktop)] $ vi /etc/wsl.conf
[automount]
root = /mnt/host
crossDistro = true
- options = "metadata"
+ options = ""
[wsl(docker-desktop)] $ exit
$ wsl -t docker-desktop
情報ソース
-
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config#automount
ほかは思い出せません。ごめんなさい。