2019/12/15 にっき

室さんの動画さきにみさせてもらった

いや、AdventCalendarで動画はるの結構ありだと思った。室さんがやってる内容ずっと喋っていてわかりやすいというのもある。(初心者にわかりやすいかは分からなかったけど自分は完全理解できた)

若者なので1.5倍速で見た。無編集と倍速相性がかなりいい。

Dockerをrootlessで動かすようにした

やろうやろうと思ってやってなかったのでやった

元のDockerでpullしてきたイメージとか多分別の場所にstoreされてるのでそのへん消しておきたさ。

なんか1回再起動しないとうまく動かなくて謎だった。

AURにパッケージあったんだけどmd5sum変わってて通らなかったので

% ghq get https://aur.archlinux.org/docker-rootless.git

してきて書き換えた

diff --git a/PKGBUILD b/PKGBUILD
index a647a36..65d2a97 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -14,7 +14,7 @@ source=(
        "docker.service"
 )
 md5sums=(
-       "943e113aedab4ee159977d9d16f7e712"
+       "17ff08d600dcae2da96e52afba95d0cf"
        "c5158588c36fc80cf85835258f8cd345"
 )

そのご

# makepkg -si

最初docker消してdocker-rootlessいれるんかな?と思ってたんだけどそんなことはなかった あとAURで入れる選択肢の他にdocker rootlessをroot権限もってるdockerの上で動かすという手もあるっぽい

あとはインストール後のメッセージとこの辺のドキュメント参考に設定を進める

docs.docker.com

表示されてるのはこれ

1. configure kernel settings
create '/etc/sysctl.d/99-docker-rootless.conf': 'kernel.unprivileged_userns_clone=1'
and then run: 'sudo sysctl --system'
> see https://docs.docker.com/engine/security/rootless/#distribution-specific-hint for detailed information
2. configure subuid and subgid
and create '/etc/subuid' and '/etc/subgid' with: 'testuser:231072:65536' (for example, 'testuser' is username)
> see https://docs.docker.com/engine/security/userns-remap/#prerequisites for detailed information
3. start and enable user service: 'systemctl --user status|start|stop docker'
4. finally set docker socket environment variable: 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock', you can also add it to '~/.bashrc' or somewhere alike

ruby-jpのSlackでznzさんに sysctl kernel.unprivileged_userns_clone で現在の設定値とれると教えてもらったので確認すると、ファイル作らなくてもすでに1

% sysctl kernel.unprivileged_userns_clone
kernel.unprivileged_userns_clone = 1

usernsについてこの辺とかそのリンク先読みながら雑に理解をして

udzura.hatenablog.jp

~/.zshrc にこれ書いて

export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

動かしてみたんだけどエラーが出てしまった

% systemctl --user start docker
% systemctl --user status docker | cat                                                                                  ● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/usr/lib/systemd/user/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2019-12-16 00:36:20 JST; 6min ago
       Docs: https://docs.docker.com
   Main PID: 656333 (rootlesskit)
     CGroup: /user.slice/user-1000.slice/user@1000.service/docker.service
             ├─656333 rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /usr/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
             └─656352 vpnkit --ethernet /tmp/rootlesskit488549275/vpnkit-ethernet.sock --mtu 1500 --host-ip 0.0.0.0
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + which vpnkit
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + net=vpnkit
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + '[' -z ']'
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + mtu=1500
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + '[' -z ']'
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + _DOCKERD_ROOTLESS_CHILD=1
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + export _DOCKERD_ROOTLESS_CHILD
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: + exec rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /usr/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656333]: time="2019-12-16T00:36:20+09:00" level=warning msg="\"builtin\" port driver is experimental"
Dec 16 00:36:20 TracePoint dockerd-rootless.sh[656345]: [rootlesskit:child ] error: executing [[ip tuntap add name tap0 mode tap] [ip link set tap0 address 02:50:00:00:00:01]]: exit status 1

pacman -S slirp4netns とか試したけど動かず

試しに再起動してみたらするりと動いた。ので消しとく。

# pacman -R slirp4netns

docker login が必要で前試したけどうまくいかなかった気がするんだけどもっかい試す

% yay -S docker-credential-secretservice

なんかするりと動いた

~/.docker/config.jsoncredsStore 書いて docker login

{
    "credsStore": "secretservice"
}

enable-linger やりたいけどまた今度...

これを読み直してやっぱり入れ直しておく

medium.com

# pacman -S slirp4netns

net.ipv4.ip_unprivileged_port_start=0

Dnsmasq動かしたくてこれを設定した

% cat /etc/sysctl.d/99-docker-rootless.conf
net.ipv4.ip_unprivileged_port_start=0
% sysctl net.ipv4.ip_unprivileged_port_start
net.ipv4.ip_unprivileged_port_start = 1024
% sudo sysctl --system

しかしnginx-proxyが /var/run/docker.sock 渡しても /run/user/1000/docker.sock 渡しても動かない

github.com

一旦諦めてroot docker使う

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/