環境
- WSL2
- Ubuntu
- Docker version 26.0.0 以下の埋め込みを参考にインストール済
Ubuntu 20.04へのDockerのインストールおよび使用方法 | DigitalOcean
結論
以下のコマンドを実行して解決した。
$ sudo usermod -aG docker $USER
$ sudo service docker start
$ sudo systemctl start nftables
$ sudo systemctl enable nftables
$ sudo service docker start
しかしこれだけでクリティカルに解決したわけではないので詳細は以下を参考にしてください。
現状
$ sudo docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ sudo service docker start
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xeu docker.service" for details.
$ sudo service docker status
× docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2024-03-27 11:30:07 JST; 1min 28s ago
TriggeredBy: × docker.socket
Docs: https://docs.docker.com
Process: 6762 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/F>
Main PID: 6762 (code=exited, status=1/FAILURE)
解決策(1)
$ sudo usermod -aG docker $USER
$ sudo service docker start
結果(1)
$ sudo service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: activating (start) since Wed 2024-03-27 11:47:44 JST; 36ms ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2597 (dockerd)
Tasks: 9
Memory: 20.5M
CGroup: /system.slice/docker.service
└─2597 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
解説(1)
Linuxシステムでは、コマンドを実行するユーザーは、Docker デーモンに接続する docker グループのメンバーである必要があったがそうでなかった。そのため、 usermod -aG docker $USERコマンドで現在のユーザーをdockerグループに入れることで解決できた。
しかしこの後、またinactive状態になってしまったので、再度原因確認をした。
現状(2)
$ sudo dockerd --debug
(省略)
DEBU[2024-03-27T12:26:20.624543879+09:00] unmounting daemon root mountpoint=/var/lib/docker
failed to start daemon: Error initializing network controller: error creating default "bridge" network: Failed to program NAT chain: COMMAND_FAILED: 'python-nftables' failed: internal:0:0-0: Error: Could not process rule: No such file or directory
$ dpkg -l | grep nftables
ii libnftables1:amd64 1.0.2-1ubuntu3 amd64 Netfilter nftables high level userspace API library
ii libnftnl11:amd64 1.2.1-1build1 amd64 Netfilter nftables userspace API library
ii nftables 1.0.2-1ubuntu3 amd64 Program to control packet filtering rules by Netfilter project
$ sudo systemctl status nftables
○ nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:nft(8)
http://wiki.nftables.org
解決策(2)
$ sudo systemctl start nftables
$ sudo systemctl enable nftables
Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.
$ sudo service docker start
結果(2)
$ sudo systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2024-03-27 12:31:29 JST; 6min ago
Docs: man:nft(8)
http://wiki.nftables.org
Main PID: 13792 (code=exited, status=0/SUCCESS)
Mar 27 12:31:29 IBM-PF44YKZS systemd[1]: Starting nftables...
Mar 27 12:31:29 IBM-PF44YKZS systemd[1]: Finished nftables.
$ sudo service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-03-27 12:39:45 JST; 2s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 15765 (dockerd)
Tasks: 11
Memory: 37.4M
CGroup: /system.slice/docker.service
└─15765 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
解説
debug結果によると、デフォルトの「bridge」ネットワークを作成する過程でNATチェーンのプログラミングに失敗し、「python-nftables」が原因でエラーが発生していたらしい。
**No such file or directory
**のエラーは、通常、必要なファイルやディレクトリが見つからない場合に表示されるとのこと。
したがって、systemctl start nftables で解決した。
参考
How to Resolve the "cannot connect to the Docker daemon" Error
How to fix “cannot connect to the Docker daemon” Error - GeeksforGeeks