🥷

パソコン起動時にWSLのdocker composeを自動起動させる

2023/12/18に公開

やりたいこと

パソコンにDockerでサーバを立てて、同居させたい。
サーバはWSL + Docker(docker-compose) 環境を使い、パソコン起動時に自動起動してほしい。

3行まとめ

  • wslのコマンド実行だと、一定時間でwsl自体が停止する可能性がある
  • wslのターミナルを立ち上げればwsl(Linux)は動き続ける
  • パソコン起動時にwslのターミナルを立ち上げ、linuxの自動起動でdocker composeを起動する

WSL上のDocker自動停止について

WSLでDockerを実行したままターミナル ウィンドウを閉じると、WSLが停止します。
不要そうな実行は自動停止することでパソコンを軽くするための仕様ですが、Dockerを動かしたい人には困った問題です。

自動停止は分かりにくいが設定があります
簡単にいうと以下のようになるみたいです。

  1. 開いているターミナル ウィンドウがない
  2. ユーザーが明示的に起動したバックグラウンド プロセスなし (Dockerのようなsystemdでの動作はカウントに含まない )
  3. 1と2がないときに設定時間を超えると停止を始める

回避方法としてバックグラウンド実行を追加したり、設定の変更などが試されています。
https://scratchpad.jp/ubuntu-on-windows11-13/

https://github.com/microsoft/WSL/issues/9968

ちょっと自分で試した感じだとうまくいかなくて試行錯誤しようと思ったのですが。

難しいこと考えなくても、動かし続けるには ターミナル ウィンドウを開い ておけば良いってことですよね

パソコン起動時にWSLウィンドウを最小で開く

WSLの場所

WSLを起動する実行ファイルは
%userprofile%\AppData\Local\Microsoft\WindowsApps
の中に"ubuntu2204.exe"のようなファイルで存在します。

スタートアップへの設置

起動したいWSLのディストリビューションのショートカットをスタートアップに置きます。

スタートアップフォルダーは、ファイルを指定して実行 (Windows + R キー)で開いて、以下を入力します。

スタートアップを開く
shell:common startup

ショートカットを設置したら、プロパティの「実行時の大きさ」を「最小化」にしておけばあまり邪魔になりません。

これで、WSLのターミナルが自動起動するようになりました。

docker-composeの自動起動

docker-composeの自動起動は以下を参考にしました。
https://qol-kk.com/wp2/blog/2020/03/04/post-1532/

docker-compose.yamlの各コンテナに

restart: always

を書き足すことで設定できます。  
設定出来たら、docker-compose upで一度起動しておきます。

以上です。

Discussion