Posted at

Windows Subsystem for LinuxでDockerを動かす

WSL上でのDocker動作については既に多くの記事がありますが、2018年9月30日時点で改めて動作検証やコミュニティへの投稿をチェックして、情報を整理しました。


動作検証環境


  • Windows 10 Pro (April 2018 Update)


  • Ubuntu 18.04 (Windows Subsystem for Linux)


まとめ


  • 最新版 のdocker-ce(公式パッケージ)は動作しないため、17.09を利用する必要がある。

  • docker-composeはWSL上でiptablesが完全にサポートされていないため動作しない。


Dockerインストール・起動方法


  • Ubuntu 18.04 を起動して、以下のコマンドを実行する。

# WSLの標準コンソールでは貼り付けが上手くできないため、一度ファイルに出力する。

cat <<EOF > ./install-docker.sh
#!/bin/bash
# 古いパッケージをアンインストールする。
apt-get remove -y docker docker-engine docker.io
apt-get update
# docker-ceの依存パッケージをインストールする。
apt install libltdl7 -y
curl -O https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb
dpkg -i docker-ce_17.09.0
\~ce-0\~debian_amd64.deb
# sudoなしでdockerを実行できるようにする。
usermod -aG docker
$USER
EOF

sudo sh ./install-docker.sh


  • 一度Ubuntuアプリケーション(ウィンドウ)を閉じる。

  • Ubuntuアプリケーションを管理者として実行してDockerサービスを起動する。(サービス起動時にはUbuntuアプリケーションをWindows管理者権限で実行する必要がある。)

sudo service docker start


  • Dockerサービスが正常に動作しているか確認する。

docker run hello-world


docker composeの動作検証


  • Ubuntu 18.04 を起動して、以下のコマンドを実行する。

# 最新の安定版をダウンロード

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > ./docker-compose
chmod u+x ./docker-compose
# テスト用のdocker-componse.yamlを作成する
cat <<EOF > ./docker-componse.yaml
version: '2'

services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
EOF
# doCker-composeを実行する
./docker-compose up


  • 現時点ではiptablesでこけてエラーとなる。

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-8838cdb48d77 -j MASQUERADE: iptables: Invalid argument. Run `dmesg' for more information.


参考