Homebrew で boot2docker をバージョンアップしたらハマった話
いつも通り Homebrew をアップグレードしたところ、boot2docker のバージョンが 1.6 から 1.7 に上がっていた。
$ brew update && brew doctor && brew upgrade $ boot2docker version Boot2Docker-cli version: v1.7.0 Git commit: 7d89508
ついでに Docker のバージョンも上がっているみたいだけど、きっと API の後方互換性が担保されていて問題はないだろうと高をくくっていたら、どうやら Docker はクライアントとサーバのバージョンが一致していないとダメらしい。
$ docker version Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): darwin/amd64 Error response from daemon: client and server don't have same version (client : 1.19, server: 1.18)
となると boot2docker の仮想マシンを作りなおせばいいのかなーと思って適当にやってみたものの上手くいかない。
$ boot2docker stop $ boot2docker delete $ boot2docker init $ boot2docker start $ eval "$(boot2docker shellinit)" $ docker version Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): darwin/amd64 Error response from daemon: client and server don't have same version (client : 1.19, server: 1.18)
あきらめて公式 GitHub の README を読むと、どうやら boot2docker download コマンドを使って新しい仮想マシンのイメージをダウンロードする必要があるらしい。 ちなみに、仮想マシンは作りなおさなくても stop & start するだけで問題なさそう。
$ boot2docker stop $ boot2docker download Latest release for github.com/boot2docker/boot2docker is v1.7.0 Downloading boot2docker ISO image... Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.7.0/boot2docker.iso to /Users/amedama/.boot2docker/boot2docker.iso $ boot2docker start $ eval "$(boot2docker shellinit)"
これで上手くいくはずー、と思ったら別のエラーに遭遇した。 今度は証明書の検証が上手くいってないっぽい。
$ docker version Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): darwin/amd64 An error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/version: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103
どういうことだー?と思いながら調べたところ以下のチケットを見つけた。 どうやら boot2docker のバージョンアップ周りに問題があるらしい。
An error occurred trying to connect: Get https://192.168.xx.xx:2376/v1.18/containers/json: remote error: bad certificate
このチケットの中にワークアラウンドのやり方をブログに書いている人がいた。
Disable TLS on boot2docker
上記のやり方を試してみよう。 まずは boot2docker の仮想マシンにログインする。
ログインしたら boo2docker の仮想マシンに環境変数として DOCKER_TLS=no を設定する。
$ cat << EOF | sudo tee /var/lib/boot2docker/profile 2&>1 > /dev/null DOCKER_TLS=no EOF $ exit
boot2docker の仮想マシンを再起動したら準備完了。
docker version コマンドでエラーが出なくなればばっちり。
$ docker version Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): darwin/amd64 Server version: 1.7.0 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 0baf609 OS/Arch (server): linux/amd64
今回は boot2docker の仮想マシン側に環境変数を設定するだけで良かったけど、もしそれだけではダメそうならクライアント側でも証明書の検証に関する環境変数をリセットするのが良いっぽい。
$ eval $(boot2docker shellinit) $ unset DOCKER_TLS_VERIFY $ unset DOCKER_CERT_PATH