WSLで「普通」にDockerが動くようになっていた話(しかしdocker-composeは動かない)
Twitterを見ていたら、こんなネタが流れてきました。
これは!!(`・ω・´)
これまで、自環境の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
公式のやり方に合わせて入れましょう。
# 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」∠)
調べてみたところ、他の方も同じような問題にぶち当たっているらしく、全く同じエラーが出ているようですね。
どうもwslのネットワーク周りの対応がまだ完全じゃ無い模様。 うーん、これで完全に行けそうな雰囲気あったんですけどねー。もうちょい様子見ですね。