Skip to content

第4章 WSL2上でのDocker運用とトラブルシューティング

4.1 systemdを用いたDocker自動起動の設定

WSL2の最新版では、Linux標準のシステム起動管理の仕組みである「systemd」を使用できます。これを有効にすることで、Debianが起動した瞬間に自動的にDockerサービスも連動して起動するようになり、毎回の sudo service docker start コマンドの入力が不要になります。

まず、Debian内にWSLの設定ファイルを作成して、systemdを有効にする設定を書き込みます。

bash
# wsl.confファイルを管理者権限のテキストエディタで作成・編集します
sudo nano /etc/wsl.conf

ファイルの中に、以下の設定テキストをコピーして貼り付けて保存してください(nanoエディタの場合は Ctrl + O の後に Enter で保存し、Ctrl + X で終了します)。

ini
[boot]
systemd=true

設定を有効化するために、WSLのシステムを一度完全にシャットダウンします。WindowsのPowerShellを開き、以下のコマンドを実行します。

powershell
# すべての稼働中のWSLディストリビューションを完全に停止させます
wsl --shutdown

再びDebianのターミナルを起動し、以下のコマンドでDockerの自動起動設定を有効にします。

bash
# systemd経由でDockerの自動起動を有効にし、その場で起動します
sudo systemctl enable docker
sudo systemctl start docker

4.2 ネットワークとファイルアクセスの最適化

WSL2環境でDockerを使用する上で、ファイルの保存場所は「動作スピード」に極めて重大な影響を与えます。

Windows側のフォルダ(例: /mnt/c/Users/...)にあるプログラムコードをDockerコンテナに直接マウント(共有)して実行しようとすると、WindowsとLinux間のファイル転送処理がボトルネックになり、コンテナの動作や読み込みが非常に遅くなります。

これを防ぐためのベストプラクティスは以下の通りです。

  1. プロジェクトファイルはWSL内に置く: 開発するソースコードやプロジェクトフォルダは、必ずDebian内のホームディレクトリ(例: /home/ユーザー名/projects/)の下に作成・配置してください。
  2. Windows側からアクセスする: Windowsのエクスプローラーのアドレスバーに \\wsl.localhost\Debian\ と入力することで、Windows側から安全かつ高速にDebian内のファイルへアクセスできます。また、エディタは「VS Code」を使用し、「WSL拡張機能」を入れて開発を行うのが最もスムーズです。

4.3 よくあるトラブルと解決策

エラー: 「permission denied」でDockerが使えない

  • 状況: docker ps などのコマンドを実行した際に、権限不足でソケットファイルにアクセスできないエラーが出ます。
  • 解決策: ユーザーがdockerグループにまだ所属していないか、設定の反映が行われていません。以下のコマンドでグループを確認してください。
bash
groups

もし出力結果に docker が見当たらない場合は、再度 sudo usermod -aG docker $USER を実行し、ターミナルソフトを再起動、またはPCを再起動してください。

状況: Dockerサービスが起動しない、または動かなくなった

  • 状況: ネットワークの設定エラーなどでDockerデーモンが起動できない状態です。
  • 解決策: 以下のコマンドで、システム起動時のエラーログを確認して原因を探します。
bash
sudo systemctl status docker.service

多くの一時的な動作不良は、WindowsのPowerShellで実行する wsl --shutdown コマンドでWSL全体をリセット(再起動)することで解決します。