べにやまぶろぐ

技術寄りの話を書くつもり

Docker build に失敗するのでバージョンを戻したい (0.9.0 => 0.8.1) (※ 2014/04/18 追記あり)

バージョン : Docker Server 0.9.0 -> 0.8.1

2014/04/18 追記 : docker server のアップデート方法について記事 (Docker で『please update docker』 と怒られるときは boot2docker download を忘れずに - べにやまぶろぐ) を書きました。バージョンを戻す必要が無ければそちらをお試しください。

最近バージョン 0.9 になったぜ Homebrew からでも簡単インストールできるぜと意気揚々と brew install boot2docker なんてやってみたんですが直後のビルドで

$ docker build -t otameshi .
Uploading context  72.7 kB
Uploading context
2014/03/17 21:48:32 Error: Multipart upload for build is no longer supported. Please upgrade your docker client.

というエラー。docker client 最新なんですけどと思ってバージョン見ると

$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.9.0, please update docker

ん?? Client version: 0.9.0 ってあるしクライアント最新ですやんと思ったところ Server version: 0.8.1 との記述発見。あれもしかしてこれアップデートしろって言ってる?クライアントじゃなくてサーバーのこと??

ちなみに

$ docker pull centos
$ docker run -i -t centos /bin/bash

みたいのは動きます。失敗するのは Dockerfile のビルド。

調べてみたら下記の issue を発見。

docker client 0.9.0 seems to have problems with server version < 0.9.0 · Issue #4597 · moby/moby · GitHub

Indeed, the version management has been improved in 0.9. However, in 0.8.1, you still have the old one and it considers that v1.10 is lower than v1.3. As it has been fixed in 0.9, you will not have the issue for the next releases.

なんてバグだぜってのは置いておいて、最初クライアントは最新で 0.9 でしょと意味わからなかったんですがどうもここで言っているのは Server version の方っぽい?そもそも質問のタイトルが docker client 0.9.0 seems to have problems with server version < 0.9.0 だからきっとそうですね。紛らわしくて思わず質問しそうになりました。

しかし今度はサーバーのアップデートの仕方がわからない orz

まぁOSSですしごにょごにょできそうな気はしますがパトラッシュ疲れたよな感じになったので一旦バージョン戻すことにしました。

# 最新版を一旦削除
$ brew uninstall boot2docker
Uninstalling /usr/local/Cellar/boot2docker/0.7.0...
$ brew uninstall docker
Uninstalling /usr/local/Cellar/docker/0.9.0...

# 利用可能なバージョンをチェック
$ brew versions docker
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
0.9.0    git checkout a90b40e Library/Formula/docker.rb
0.8.1    git checkout 4ee0389 Library/Formula/docker.rb
0.8.0    git checkout 9880ace Library/Formula/docker.rb
$ cd /usr/local/

# 0.8.1 を向くようにする
$ git checkout 4ee0389 Library/Formula/docker.rb
$ brew install docker
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-0.8.1.mavericks.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/docker-0.8.1.mavericks.bottle.tar.gz
==> Pouring docker-0.8.1.mavericks.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/docker/0.8.1: 9 files, 12M

# インストール
$ brew install boot2docker
==> Downloading https://github.com/boot2docker/boot2docker/archive/v0.7.0.tar.gz
Already downloaded: /Library/Caches/Homebrew/boot2docker-0.7.0.tar.gz
🍺  /usr/local/Cellar/boot2docker/0.7.0: 4 files, 32K, built in 2 seconds

ということで

$ docker version
Client version: 0.8.1
Go version (client): go1.2.1
Git commit (client): a1598d1
Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.9.0, please update docker

となりました。不具合調査時はクライアントとサーバー両方のバージョンを気にするのが必要そうです。まずはそれぞれのロールを理解しないと。。。