boot2dockerを1.7.0にUpgradeしたらハマった2つのこと

はじめに

Docker 1.7がリリースされましたね!

早速触ってみようと思い、手元のMacBook上でboot2dockerupgradeしました。

$ boot2docker upgrade

が、そこで2つのトラブルが発生しました。その解決方法をご紹介します。

1つ目

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
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

一度deleteして再度起動すると解消されるのですが...

$ boot2docker delete
$ boot2docker init
$ boot2docker start

またstop -> startすると同じエラーが発生します。

$ boot2docker stop
$ boot2docker start
$ 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

この件はboot2dockerissueとして上がっていました。 ワークアラウンドとしては、TLS通信を無効にすることです。

$ boot2docker ssh

docker@boot2docker:~$ sudo vi /var/lib/boot2docker/profile
DOCKER_TLS=no

docker@boot2docker:~$ exit

$ boot2docker stop
$ boot2docker start

これでエラーは解消されます。が。

2つ目

TLS通信に起因する問題が解消したと思ったら、違うエラーが発生しました。

$ 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.104:2376/v1.19/version: dial tcp 192.168.59.104:2376: i/o timeout

通信エラーが発生しています。こちらはStackOverflowに同じ問題が発生した人がいました。

ワークアラウンドとして、VirtualBoxのホストオンリーアダプターを確認します。

Oracle_VM_VirtualBox_マネージャー

そしてDockerの仮想ネットワーク宛の通信経路をホストオンリーアダプターに向けます。

$ sudo route -nv add -net 192.168.59 -interface vboxnet0
u: inet 192.168.59.0; u: link vboxnet0:a.0.27.0.0.0; RTM_ADD: Add Route: len 140, pid: 0, seq 1, errno 0, flags:<UP,STATIC>
locks:  inits:
sockaddrs: <DST,GATEWAY,NETMASK>
 192.168.59.0 vboxnet0:a.0.27.0.0.0 (0) 0 ffff ff
add net 192.168.59: gateway vboxnet0

これで通信エラーが解消されます。

$ 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): 0baf609s
OS/Arch (server): linux/amd64

さいごに

ちょっとハマったことをメモとして残してみました。さ、これからちゃんと触ります。