はじめに
WSLでdocker-composeを使いたかったのだが、以下のエラーが。
$ docker-compose up -d
Creating network "service_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable NAT rule: (iptables failed: iptables --wait -t nat -I POSTROUTING -s 172.18.0.0/16 ! -o br-b2b7dd2f10a1 -j MASQUERADE: iptables: Invalid argument. Run `dmesg' for more information.
(exit status 1))
WSLのネットワーク周りの対応が完全でないことが原因の様子。
WSL 2であれば解決しそうということで以下の作業を実施。
環境
- Windows10 Home
- メモリ: 16GB
- Build Version: 18917以前
作業手順
-
Windows 10 Insider Preview の登録
-
Windows 10 Preview Build のインストール
-
WSL 2のインストール
-
WSL 1でUbuntuのインストール
-
WSL 1 -> WSL 2への切り替え
-
dockerのインストール
-
docker-composeのインストール
1. Windows 10 Insider Preview の登録
- 以下から登録、Microsoftアカウントが必要
2. Windows10 Preview Build のインストール
Windows Insider Program の設定
-
設定
>更新とセキュリティ
>Windows Insider Program
-
Windows Insider Program
の画面上で、以下の設定を行う- どのようなコンテンツの受け取りを希望されるか => Windows のアクティブな開発
- 新しいビルドを取得する頻度 => ファースト
Windows Update
-
設定
>更新とセキュリティ
>Windows Update
- 再起動が必要
-
Build Versionが18917以降になっていればOK
- 「Windows Insider Program の設定」を行っていないと、Versionが上げられないことに注意
-
確認方法
- コマンドプロンプトのコンソール上部から確認
- コマンドプロンプトから
winver
で確認
3. WSL 2のインストール
- Power Shellを管理者権限で起動、以下のコマンドを実行
- 実行後、再起動が必要
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
- 再起動後に再度同じコマンドを実行すると以下のような表示になる
PS C:\WINDOWS\system32> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Path :
Online : True
RestartNeeded : False
- Build 18917以降でないと実行できない
PS C:\WINDOWS\system32> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature : 機能名 VirtualMachinePlatform は不明です。
発生場所 行:1 文字:1
+ Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlat ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Enable-WindowsOptionalFeature], COMException
+ FullyQualifiedErrorId : Microsoft.Dism.Commands.EnableWindowsOptionalFeatureCommand
4. WSL 1でUbuntuのインストール
- Microsoft Store からアプリをインストール
- インストール済みであればここはスキップ
5. WSL 1 -> WSL 2への切り替え
- 現在のVersionを確認
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-16.04 Stopped 1
-
wsl --set-version
で切り替え
PS C:\WINDOWS\system32> wsl --set-version Ubuntu-16.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
6. dockerのインストール
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get install docker-ce
- 起動
$ service docker status
* Docker is not running
$ sudo service docker start
* Starting Docker: docker [ OK ]
$ service docker status
* Docker is running
- pullできるか確認
$ docker pull alpine:latest
latest: Pulling from library/alpine
9d48c3bd43c5: Pull complete Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 961769676411 4 days ago 5.58MB
7. docker-composeのインストール
- 以下を参考にインストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose --version
docker-compose version 1.24.1, build 4667896b
注意点
dockerについて
WSL 1の状態でdockerをインストールしていたのだが、WSL 2に切り替えたところpullできなくなった。
$ docker pull alpine:latest
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 172.24.240.1:53: read udp 172.24.249.251:42777->172.24.240.1:53: i/o timeout
アンインストールして「6. dockerのインストール」の手順でインストールし直したところ、エラーは出なくなった。
参考
-
WSLで「普通」にDockerが動くようになっていた話(しかしdocker-composeは動かない)
-
WSL 2 のインストール手順