LoginSignup
9
12

More than 1 year has passed since last update.

WSL2起動時にdockerなどのサービスを同時に起動する(systemd利用)

Last updated at Posted at 2023-03-25

WSL2を使う際、以前はいちいちsudo service docker startなどと打たなければならず不便だったが、気づけばWSLのアップデートにより、いくつか設定を追加すればこの辺の問題が解消されることに気づいたのでメモ。

前提条件

wsl-configの公式ドキュメント - systemdのサポートを見ると、
バージョン0.67.6以降のWSL2でsystemdを有効に出来ることが分かる。

PowerShellなどで

wsl --version

などと打って上記の条件を満たすことを確認する。

ちなみに今回検証を行った環境はWindows11で、

# wsl --version
WSL バージョン: 1.1.3.0
カーネル バージョン: 5.15.90.1
WSLg バージョン: 1.0.49
MSRDC バージョン: 1.2.3770 
Direct3D バージョン: 1.608.2-61064218
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.1413

といった感じ。また、使ったディストリビューションはストアから入手したUbuntu22.04LTSであり、
サービスを起動する対象してDocker(Community Edition)をdocker-docsに記載の手順に従ってインストールしている。

設定の実施

先程のwsl.confに関するドキュメントに記載している通りにすればOK.

対象のWSL2ディストリビューションに入り、例えばsudo vim /etc/wsl.confなどとしてwsl.confに以下のような内容を追記・設定する。(※無ければ新規作成する)

/etc/wsl.conf
[boot]
systemd=true

次に、systemctlコマンドで使いたいサービスをenableにしておく。
今回の例ではdockerを自動起動するようにしたいので、

# bashなど
sudo systemctl enable docker

などとする。

今回はdockerの自動起動を例にしているが、例えばQiita - systemctl コマンド などを参考にし、他のサービスの設定を同様に行うことが出来る。

最後にsystemdのサポートを参考に、以下のいずれかを実行する:

# 全てのdistroのシャットダウン
wsl --shutdown

# 対象のものだけシャットダウン
wsl -t <対象のディストリビューション名>

これで次回起動時からsystemctl enableしたサービスが自動起動する。

実際に設定を行ったディストリビューションを再起動し、

# bashなど

# dockerサービスの例
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 Sat 2023-03-25 20:29:51 JST; 11min ago
# TriggeredBy: ● docker.socket
#        Docs: https://docs.docker.com
#    Main PID: 585 (dockerd)
#       Tasks: 14
#      Memory: 148.4M
#      CGroup: /system.slice/docker.service
#              └─585 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

などのように、自分でsudo systemctl start dockerとかsudo service docker startとかをやらなくても勝手に立ち上がっていることが確認できる。

参考

一応他のやり方もあるので紹介。

wsl-configの設定のドキュメントを読み進めると、ブート設定という項目があり、WSLの開始時に実行するコマンドを指定できるとのこと。

ドンピシャな例としてdockerをWSL起動時に一緒に立ち上げる例が上記ドキュメント内で示されている。

/etc/wsl.conf
# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

ただし、ドキュメントにも記載の通り、Windows11以降かWindows Server2022以降でないと使用できないとのこと。

個人的にはsystemctlが使える場合はそちらでやる方がWSLに依らない一般的な手法を使えるため良いような気がしたが、
これもどこかで使い道があるかもしれないのでメモしておく。

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12