hack のためのネタ帳, etc,,,

まとめ

ZFS root で snap 版 docker を使う場合、
/var/snap/docker/current/etc/docker/daemon.json の
  "storage-driver": "overlay2"

  "storage-driver": "zfs"
に変更する必要がある。

もし docker:home が
$ snap connections | awk 'NR==1||/docker:home/'
Interface                 Plug                                           Slot                             Notes
home                      docker:home                                    :home                            -
になければ以下のコマンドで追加
sudo snap connect docker:home

docker グループ
$ grep docker /etc/group
docker:x:141:MY_USER_NAME
みたいな行がなければ
以下のコマンドで追加
sudo addgroup --system docker
sudo adduser $USER docker

設定の反映は以下のコマンド
newgrp docker # docker group を追加した場合のみ必要
sudo snap disable docker
sudo snap enable docker

状況

ZFS root で運用してる Ubuntu 22.04.1 LTS に snap 版の docker
$ snap list | awk 'NR==1||/docker/'
Name                       Version           Rev    Tracking         Publisher     Notes
docker                     20.10.17          2343   latest/stable    canonical**   -
を入れてみたのだが、
$ docker search samba
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/search?limit=25&term=samba": dial unix /var/run/docker.sock: connect: permission denied
$ sudo docker search samba
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
みたいな感じで、 /var/run/docker.sock にある unix socket に接続できないと言われてエラーになる。
docker.sock はこんな感じ。
$ lst /var/run/docker.sock 
srw-rw---- 1 root root 0 2023-02-18 10:14:39 /var/run/docker.sock

sudo してもアクセスできてないので、ひょっとして先日の のように home 以外が隔離されててアクセス出来ない問題なのでは?と思い、「docker /var/run/docker.sock: connect: permission denied snap」でググってみたところ、 経由で docker-snap のリポジトリ に README.md #Instllation の説明を見つけた。

snap 版 docker を動かす場合は以下の追加設定が必要っぽい。

docker:home へ自動で接続されてない場合は
$ sudo snap connect docker:home
で自動接続するように、
docker グループが存在しない場合は
$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker
で docker グループを追加して、docker グループ付きでログインし直した上で、
以下のコマンドで docker サービスを再起動しなさいと。
$ sudo snap disable docker
$ sudo snap enable docker

docker:home は以下のようになってれば自動接続されてると思うので設定は不要なはず。
$ snap connections | awk 'NR==1||/docker:home/'
Interface                 Plug                                           Slot                             Notes
home                      docker:home                                    :home                            -
自動接続が切れてる場合、docker:home の行が表示されず、
上記コマンドで接続した場合、Notes の列に Manual と表示されるようだ。

グループは
$ grep docker /etc/group
docker:x:141:MY_USER_NAME
みたいになってれば OK

しかし、この設定を行っても、冒頭のエラーが解消されない。
Is the docker daemon running?
みたいに言われていたので、確認してみると確かに
$ ps ax | grep docker
3453136 pts/9    S      0:00 newgrp docker
3507711 pts/9    S+     0:00 grep --color=auto docker
のような状況で、docker daemon が上がっておらず、
snap services を確認してみても
$ snap services | awk 'NR==1||/docker/'
Service                                              Startup  Current   Notes
docker.dockerd                                       enabled  inactive  -
のように enabled にはなっているが inactive という状況。
systemctl status も以下のような状況なので、何らかのえらーにより失敗している状況。
$ systemctl status snap.docker.dockerd.service 
× snap.docker.dockerd.service - Service for snap application docker.dockerd
     Loaded: loaded (/etc/systemd/system/snap.docker.dockerd.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2023-02-18 19:33:26 JST; 1s ago
    Process: 3791617 ExecStart=/usr/bin/snap run docker.dockerd (code=exited, status=1/FAILURE)
   Main PID: 3791617 (code=exited, status=1/FAILURE)
        CPU: 239ms

 2月 18 19:33:26 HOSTNAME systemd[1]: snap.docker.dockerd.service: Scheduled restart job, restart counter is at 10.
 2月 18 19:33:26 HOSTNAME systemd[1]: Stopped Service for snap application docker.dockerd.
 2月 18 19:33:26 HOSTNAME systemd[1]: snap.docker.dockerd.service: Start request repeated too quickly.
 2月 18 19:33:26 HOSTNAME systemd[1]: snap.docker.dockerd.service: Failed with result 'exit-code'.
 2月 18 19:33:26 HOSTNAME systemd[1]: Failed to start Service for snap application docker.dockerd.
journalctl は以下のような感じ。

$ journalctl -ex


注目すべきは
 2月 18 19:33:09 HOSTNAME kernel: overlayfs: missing 'lowerdir'
...
 2月 18 19:33:11 HOSTNAME kernel: overlayfs: upper fs does not support RENAME_WHITEOUT.
 2月 18 19:33:11 HOSTNAME kernel: overlayfs: upper fs missing required features.
の部分。
なんか、仮想の fs に overlayfs が適用出来ず、起動に失敗してるっぽい。

ということで、思い当たったのが ZFS root
なんか前にどっかで ZFS だと overlayfs が適用できないみたいな話聞いたなと。

そこで、「docker overlayfs: upper fs does not support RENAME_WHITEOUT.」でググってみたところ以下のページを見つけた。 更に、「snap docker zfs」でググって以下のページを見つけた。
/etc/docker/daemon.json の設定編集しろと言う話だが、snap にはこれがない。
/snap/docker/$VERSION/config/daemon.json、/snap/docker/current/config/daemon.json はあるけど、これらは
$ lst /snap/docker/*/config/daemon.json 
-rw-r--r-- 1 root root 72 2022-10-17 15:14:34 /snap/docker/2343/config/daemon.json
-rw-r--r-- 1 root root 72 2022-10-17 15:14:34 /snap/docker/current/config/daemon.json
で root には rw 出てるのに sudo vi しても readonly で編集できない。
/snap/docker/current/config/daemon.json」でググると以下のページを見つけた。
/var/snap/docker/current/etc/docker/daemon.json or /var/snap/docker/current/config/daemon.json ってことだが、
うちには /var/snap/docker/$VERSION/etc/docker/daemon.json、/var/snap/docker/current/etc/docker/daemon.json しかなかった。

current は $VERSION への symbolic link
$ lst /var/snap/docker/
合計 11
drwxr-xr-x 4 root root 4 2023-02-18 10:14:21 2343
drwxr-xr-x 4 root root 5 2023-02-18 10:14:22 common
lrwxrwxrwx 1 root root 4 2023-02-18 19:33:08 current -> 2343

ということで、とりあえず、/var/snap/docker/current/etc/docker/daemon.json の
  "storage-driver": "overlay2"

  "storage-driver": "zfs"
に変更して、
sudo snap disable docker
sudo snap enable docker
してみたところ、無事、冒頭のエラーを解決出来た。

なお storage-drive に関する公式ドキュメントは以下にあった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます