15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker volume mount時のuser owner問題

Last updated at Posted at 2019-10-13

問題

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!! :)

参考

問題点

  • 色々前提が多い
  • 一部機能に制限がある
  • マルチユーザーで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

情報ソース

15
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?