2019/12/15 にっき
室さんの動画さきにみさせてもらった
いや、AdventCalendarで動画はるの結構ありだと思った。室さんがやってる内容ずっと喋っていてわかりやすいというのもある。(初心者にわかりやすいかは分からなかったけど自分は完全理解できた)
ライブコーディングのようなものをして動画をとってみたんだけど、誰か公開前に試しにみてやってもらえないですか
— モハメド・兄 (@murokaco) December 15, 2019
若者なので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の上で動かすという手もあるっぽい
あとはインストール後のメッセージとこの辺のドキュメント参考に設定を進める
表示されてるのはこれ
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についてこの辺とかそのリンク先読みながら雑に理解をして
~/.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.json
にcredsStore
書いて docker login
{ "credsStore": "secretservice" }
enable-linger
やりたいけどまた今度...
これを読み直してやっぱり入れ直しておく
# 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
渡しても動かない
一旦諦めてroot docker使う