Appearance
第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 docker4.2 ネットワークとファイルアクセスの最適化
WSL2環境でDockerを使用する上で、ファイルの保存場所は「動作スピード」に極めて重大な影響を与えます。
Windows側のフォルダ(例: /mnt/c/Users/...)にあるプログラムコードをDockerコンテナに直接マウント(共有)して実行しようとすると、WindowsとLinux間のファイル転送処理がボトルネックになり、コンテナの動作や読み込みが非常に遅くなります。
これを防ぐためのベストプラクティスは以下の通りです。
- プロジェクトファイルはWSL内に置く: 開発するソースコードやプロジェクトフォルダは、必ずDebian内のホームディレクトリ(例:
/home/ユーザー名/projects/)の下に作成・配置してください。 - 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全体をリセット(再起動)することで解決します。