無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

WSLで「普通」にDockerが動くようになっていた話(しかしdocker-composeは動かない)

Twitterを見ていたら、こんなネタが流れてきました。

qiita.com

これは!!(`・ω・´)

これまで、自環境のWSL上でDocker使おうと四苦八苦しておりまして、一旦WSLからDocker for Windows(+Hyper-V)側をコールして使ったりしていました。しかし、この場合だと-itオプション付きで起動してもttyが全く応答を返さなくなるという問題があったわけです。
なので、諦めてVagrant環境を別に作ってそこでDocker動かすというよくわからない運用をしていたんですよね(´・ω・`)

ただ、今回流れて来たQiitaの記事通りの手順でやったところ、普通にWSL上でDocker使えました(`・ω・´)

# docker run -it ubuntu bash
root@d83774f69c10:/#

とても良さげ。Docker for Windowsも不要になるので、Hyper-Vも不要でいけそう。



さて、dockerが使えた所でdocker-composeを使ってみることにします。 Qiitaの記事と同じ方法でDockerをインストールした際は、docker-composeついてきません。なので自前で入れる必要があります。 wslでUbuntu使っているのであれば、sudo apt install docker-composeで何も考えずにインストールできますが、かなりバージョンが古いです。

docker-compose version 1.8.0, build unknown
docker-py version: 1.9.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

公式のやり方に合わせて入れましょう。

docs.docker.com

# sudo docker-compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

OK

バージョンまで確認できたので、おもむろにsudo docker-compose up叩きます

# sudo docker-compose up
Creating network "etl_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 {ip}/16 ! -o br-e9ec09beb9a3 -j MASQUERADE: iptables: No chain/target/match by that name.
 (exit status 1))

エラーで死ぬ。なんでや!(:3」∠)

調べてみたところ、他の方も同じような問題にぶち当たっているらしく、全く同じエラーが出ているようですね。

www.scriptlife.jp

どうもwslのネットワーク周りの対応がまだ完全じゃ無い模様。 うーん、これで完全に行けそうな雰囲気あったんですけどねー。もうちょい様子見ですね。