概要
wsl2でDocker自動起動設定 - Qiita
wsl2を使ってみて、Dockerを自動起動設定ができないらしく、毎回 serviceコマンドを打つのが面倒なので検討してみたユーザでパスワード無しで起動できるようにsudoに設定$ sudo…
これまで、WSL(WSL2)ではsystemd未対応の為、dockerのサービスが自動起動されず上記のような設定を行っていたのですが、下記の通りsystemdに対応したとのことです。
「Windows Subsystem for Linux」が「systemd」に対応へ/「systemd」に依存するLinuxアプリケーションを「WSL」で利用可能に
米Microsoftは9月21日(現地時間)、「Windows Subsystem for Linux」(WSL)ディストリビューションで「systemd」が利用可能になったと発表した。「systemd」に依存するLinuxアプリケーションを「WSL」で利用可能になる。
私の環境のWSLは下記でバージョンアップを行っており、systemd対応が行われていることになります。
WSL2(Linux 用 Windows サブシステム)で Linux GUI アプリを実行する
概要Windows10環境のWSLでLinux GUIアプリが利用可能になったとのことです。 Windows 10でもLinux GUIアプリが利用可能 ~Microsoft Store版が既定の「WSL」に - 窓の杜 Microso
systemdの有効化
/etc/wsl.conf ファイルを新規に作成し、下記の記載を行いました。
[boot] systemd=true
dockerサービスの起動確認
Linux(Ubuntu)のシェルから下記を実行して確認しました。
sudo service docker status
sudo systemctl status docker
なお、設定を変更した後は、PowerShell から下記のようにWSLをシャットダウンしました。
wsl --shutdown
systemd有効化前
ここでは以前の自動起動設定は無効にして試しました。 dockerサービスは自動起動されません。また、systemdが無効となっていることがわかります。
~$ sudo service docker status * Docker is not running
~$ sudo systemctl status docker System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
systemd有効化後
どちらも同じ結果になりました。(serviceコマンドを実行するとsystemctl相当の処理が実行されるようになっているようです) systemdが有効化されており、dockerサービスが自動起動されています。
~$ 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 2022-12-28 22:43:38 JST; 1min 53s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 391 (dockerd) Tasks: 13 Memory: 96.0M CGroup: /system.slice/docker.service └─391 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224143400+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_bps_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224148100+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.read_iops_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224152400+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_iops_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224630200+09:00" level=info msg="Loading containers: start." Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.358807600+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon op> Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.408680800+09:00" level=info msg="Loading containers: done." Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.486661300+09:00" level=info msg="Docker daemon" commit=3056208 graphdriver(s)=overlay2 version=20.10.21 Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.487047100+09:00" level=info msg="Daemon has completed initialization" Dec 28 22:43:38 rockers systemd[1]: Started Docker Application Container Engine. Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.519619500+09:00" level=info msg="API listen on /run/docker.sock"
~$ sudo systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-12-28 22:43:38 JST; 1min 28s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 391 (dockerd) Tasks: 13 Memory: 96.0M CGroup: /system.slice/docker.service └─391 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224143400+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_bps_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224148100+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.read_iops_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224152400+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_iops_device" Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.224630200+09:00" level=info msg="Loading containers: start." Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.358807600+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon op> Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.408680800+09:00" level=info msg="Loading containers: done." Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.486661300+09:00" level=info msg="Docker daemon" commit=3056208 graphdriver(s)=overlay2 version=20.10.21 Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.487047100+09:00" level=info msg="Daemon has completed initialization" Dec 28 22:43:38 rockers systemd[1]: Started Docker Application Container Engine. Dec 28 22:43:38 rockers dockerd[391]: time="2022-12-28T22:43:38.519619500+09:00" level=info msg="API listen on /run/docker.sock"
まとめ
WSL2でsystemd対応が行われており、設定によりsystemdが有効化することができます。 これによりdockerサービスが自動起動されることが確認できました。
WSLg の対応も合わせ、WSL2は、よりネイティブのLinux環境に近づきました。さらに活用が進みそうです。
参考
WSLのsystemdサポートでDocker Engineをサービスとして利用する
WSLでsystemdのサポートがプレビューで利用可能になりました。この記事ではWSL2にDocker Engineを直接インストールしてsystemdのサービスとしてデーモンを自動起動できることを確かめます。
Systemd support is now available in WSL!
Systemd support is now available in WSL! The Windows Subsystem for Linux (WSL) can now run systemd inside of your WSL distros, empowering you to do more with yo...