Debian Wheezyに入っていたふるーいDockerを入れなおした

以下のようなありさまでした。

    $ uname -a
    Linux somehost.example.com 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3~bpo70+1 (2016-01-19) x86_64 GNU/Linux
    $ cat /etc/debian_version
    7.9
    $ dpkg -l '*docker*'
    Desired=Unknown/Install/Remove/Purge/Hold
    | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
    deb https://apt.dockerproject.org/repo debian-wheezy main
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name                                  Version                 Architecture            Description
    +++-=====================================-=======================-=======================-  ================================================================================
    un  docker                                <none>                                          (no description available)
    un  docker.io                             <none>                                          (no description available)
    un  lxc-docker                            <none>                                          (no description available)
    rc  lxc-docker-1.0.0                      1.0.0                   amd64                   Linux container runtime
    ii  lxc-docker-1.0.1                      1.0.1                   amd64                   Linux container runtime
    un  lxc-docker-virtual-package            <none>                                          (no description available)

これは古いなぁ……

Debian WheezyでもDockerのインストールサポート環境ということで、以下に書いてあるとおりにインストールしてみました。

https://docs.docker.com/engine/installation/linux/debian/

上記のとおりにやって正常にインストールできていれば問題なかったのですが。

``sudo apt-get install docker-engine`` までは成功したものの、 ``docker run hello-world``が応答しないという問題が発生しました。

    $ sudo docker run hello-world
    (ここで何も表示されない)

Docker Daemonと通信する段階で動作していないような症状です。
例えば ``docker version`` や ``docker ps`` といったコマンドでもうんともすんとも言わない状態です。
Daemonと通信できている場合には一応何らかの出力が画面に出てきたりするはずなのですが……

pstreeを見る限りではデーモン自体のプロセスは待機しているので、これはDaemon閣下に何かあったのだと思われました。

試しに ``sudo service docker stop`` 後にコマンド実行すると、今度はエラーが出ます。

```
$ docker ps
(何も出てこない。Ctrl-Cで中断)
$ sudo service docker stop
[ ok ] Stopping Docker: docker.
$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
```

Daemonに接続した上でそこからの応答に問題があるのだろう、というような感じですね。

※ 振り返ってみたら上記、``docker ps``にだけ``sudo`` がなかったですね……。ただ、dockerグループの設定は旧バージョンで設定済なので、特に差異はないはずですが。インストール後はsudoなしで実行して操作成功しています。

容易に予想できるのは、ふるーいふるーいデータが邪魔していることでしょうか。
公式のマニュアルには直接そういう可能性がある旨、記載無いですが、ありえる線と思われました。

そこで一旦パッケージ自体をpurgeした上で、/var/lib/docker を退避しました。/var/lib/docker を消すという指示はマニュアルの通り。

    $ sudo apt-get purge docker-engine
    ..
    $ sudo apt-get autoremove --purge docker-engine
    ..
    $ sudo mv /var/lib/docker /var/lib/docker.bak.2016-02-11

で、インストールしなおしたところ、動作するようになりました。

    $ sudo docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    03f4658f8b78: Pull complete
    a3ed95caeb02: Pull complete
    Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker.
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker Hub account:
     https://hub.docker.com
    
    For more examples and ideas, visit:
     https://docs.docker.com/userguide/

このコピペだと分からないのですが、正常時に上記のコマンドを実行した場合、 ``Unable to find image 'hello-world:latest' locally`` という行はとりあえずすぐ (自環境 == VPSの安いところでも1秒未満で) 表示されます。その後イメージ取ってくる部分があるので当然そこは数秒程度は待たされると思われますけれども、まず最初にメッセージが出てくるかどうかは、動作しているかどうかの大事な分岐と思われます。

本件とあんまり関係ないですが、実行例をマニュアルとかに記載するときは正常時にどういうアウトプットが出てくるか、表示例を一部でもいいからコマンド実行後に突っ込んどくのがより親切だと思いました。その類のヒントがないとどこで待たされるのが良いかも予想がつきません。

また、verbose相当のオプションでは潜在的に時間がかかる、もしくは無限に待たされる可能性がある処理の手前で何か書くとどこで止まったかを推測しやすいのでより良い、というのも、まぁ、あると思いました。

あ、インストール後のバージョンは以下のとおりでした。

```shell-session
$ docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 18:25:18 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 18:25:18 2016
 OS/Arch:      linux/amd64
```