Windows 11のDocker Desktopでsam localを用いたAWS個人開発を行っていたところ、
Error: path is on mount ‘D:’, start on mount ‘C:’
のようなドライブ絡みのエラーが発生してデバッグができない想定外のハマりどころがあり、急遽久々にWSL2でDocker開発環境を構築したので、そのときの作業手順についての備忘録。
WSL2の場合でも、Windowsのネットワーク構成を変えたりするとコンテナのメタ情報が壊れて突然コンテナどこかDockerサービス自体が起動できなくなってしまうなど、かなり面倒なハマりどころもありますが、ローカル開発環境としてWindowsを使う場合は仕方ないですね…。
手順
本例ではWSL2のディストリビューションイメージの配置先をD:ドライブ配下にしています。
-
WSL2で開発用のUbuntu環境を作成してrootでログインする。
# WSLをアップデート wsl --update # WSL2をデフォルトに設定 wsl --set-default-version 2 # Ubuntuを新規インストール wsl --install -d Ubuntu # インストールしたUbuntuをシャットダウン wsl --terminate Ubuntu # インストール直後のUbubtuイメージを任意の保存先にエクスポート wsl --export Ubuntu D:\wsl2\ubuntu.tar # デフォルトのUbuntuを使わない場合は削除 wsl --unregister Ubuntu # Ubuntuイメージを任意の保存先(D:\wsl2\)に任意のディストリビューション名前(ここではDevLinux)でインポート wsl --import DevLinux D:\wsl2\DevLinux D:\wsl2\ubuntu.tar # 開発用のUbuntuを起動 wsl -d DevLinux
-
開発用のUbuntu環境に一般ユーザーを追加してsudoを許可する。
# 任意のユーザー名(ここではuser)を追加 adduser user # 追加したユーザーにsudoを許可 usermod -aG sudo user
-
開発用のUbuntu環境内のWSL設定ファイルを編集する。
vim /etc/wsl.conf
systemdの有効化&手順2で作成した一般ユーザーをデフォルトユーザーとして指定する。
[boot] systemd=true [user] default=user
-
開発用のUbuntu環境を抜ける。
# シェルを抜ける exit
-
開発用のUbuntu環境を一旦終了してから再度起動して一般ユーザーでログインする。
# 開発用のUbuntu環境を終了 wsl --terminate DevLinux # 開発用のUbuntu環境を起動 wsl -d DevLinux
-
開発用のUbuntu環境にインストール済のパッケージの更新とDockerのインストール。
# パッケージをアップデート sudo apt update # パッケージをアップグレード sudo apt upgrade # Dockerをインストール sudo apt install docker.io # Dockerサービスを開始 sudo systemctl start docker # Dockerサービスの自動起動を設定 sudo systemctl enable docker
※最新のDockerを利用したい場合は公式リポジトリを追加してインストールしてください。
-
一般ユーザーをdockerグループに追加する。
# 現在のログインユーザーをdockerグループに追加 sudo usermod -aG docker $USER
以上でWSL2上のUbuntuへのDocker環境の構築は終了です。
後はお好みで、例えばVSCodeのRemove Development(Dev Containers)拡張などを使えば、Windows上のVSCodeからDockerコンテナを使った開発を満喫できます。
以上です。