ようへいの日々精進XP

よかろうもん

docker 小ネタ(docker 0.8.1 にアップグレードして docker が起動しなくなって焦った件)

はじめに

  • docker も日々進化
  • Ubuntu で docker のバージョンを 0.8.1 にアップグレードしたら docker が起動しなくなってかなり焦った
  • 一応、解決したのでメモ
  • 調査の段階で発見があったのでメモ

ことの経緯

フワッと apt-get install lxc-docker

フワッと apt-get install lxc-docker したら 0.8.1 にアップグレードされたので docker version すると...

invalid value "tcp://127.0.0.1:4243/" for flag -H: Invalid bind address format: 127.0.0.1:4243/

ん?なんか、変わった??

ps aux | grep docker

kappa     4685  0.0  0.0  14616   936 pts/1    S+   10:26   0:00 grep docker

ありゃ、docker 起動してないし。


調査

/var/log/upstart/docker.log を確認

Ubuntu の場合 docker のデーモンは upstart で管理されているのでデーモンのログは...

/var/log/upstart/docker.log

に出力される(らしい)。これを確認すると...

invalid value "tcp://127.0.0.1:4243/" for flag -H: Invalid bind address format: 127.0.0.1:4243/

と出力されている。ほうほう、どうやら -H オプションの書き方か何かが変わった模様。


原因

/etc/init/docker.conf

/etc/init/docker.conf に以下のような設定が入っていたのが docker デーモンが起動しなかった理由。

--- docker.conf.original        2014-02-22 10:31:23.082986513 +0900
+++ docker.conf 2014-02-22 10:31:43.154985884 +0900
@@ -11,5 +11,5 @@
        if [ -f /etc/default/$UPSTART_JOB ]; then
                . /etc/default/$UPSTART_JOB
        fi
-       "$DOCKER" -d $DOCKER_OPTS -H=tcp://127.0.0.1:4243/
+       "$DOCKER" -d $DOCKER_OPTS  -H=tcp://127.0.0.1:4243
 end script

ふう。

-H オプションで何かアカンかったのか?

試してみたところ -H オプションの書き方が悪かった。

tcp://127.0.0.1:4243/

では無くて...

tcp://127.0.0.1:4243

のようにポート番号の後のスラッシュを付けないのが正しい。

以前のバージョンでは発生していなかったことから、0.8.1 にアップデート以降 -H オプションのパス指定のチェックが厳密になったのかもしれない。

-H オプションをちょっと詳しく

-H オプションは下記のようになっている。

-H, --host=[]: tcp://host:port, unix://path/to/socket, fd://* or fd://socketfd to use in daemon mode. Multiple sockets can be specified

Multiple sockets can be specified とあり複数の docker デーモンを起動出来る変更が 0.7 以降位から加えられているので、もしかするとこの辺りから末尾のスラッシュは付けてはいけないようになったのかも。

ちなみに、0.6.6 で試して見たところ...

script
        /usr/bin/docker -d -H=tcp://127.0.0.1:4243/
end script

で docker デーモンは起動した。

ちなみに

古いバージョンの docker をインストール場合には以下のように実行する。

sudo apt-get install lxc-docker-0.6.0

また、apt-cache search lxc-docker を実行すると lxc-docker のパッケージバージョンを確認することが出来る。


さいごに

  • ホントに小ネタですいません
  • でも、腑に落ちない...(以前は動作していたのになあ)