事の発端
普段 CouchDB 2.0.0 を使ってプログラミングしている。 その環境に嬉々として macOS High Sierra をインストールしたところ、 CouchDB が起動しなくなりました。
CouchDB の github に CouchDB 2.1.0 への issue #840 が上がっていて、erlang のバグらしいこと、それの CouchDB がサポートするバージョンのソースを入手し、1行修正の上ビルドし直して適用したらうまくいくかもしれない、との情報があったが、issue を上げた人がまだそれに対して返信していない。この issue のスレッドには、1.6 でも同様の状態になったとコメントしている人もあるので、どうやら 2.0.0 もその憂き目にあった様子。
しかも自分の知識の範疇で erlang をビルドし直した後にどうするかが今ひとつピンとこない。
こりゃ、もう、docker でしょ、ってことで docker 構築です。
最近なんでも docker に頼る自分です。(^^;;;
Docker Image の確定
入れたいバージョン: CouchDB 2.0.0
Docker Hub で検索してみると、Official の 2.0.0 が見当たらない。CouchDB の DOCS で、instillation の章に "Installation via docker" なる節があって、そこを見ると apache/couchdb に tag 2.0.0 があるらしきことが書いてある。これを頼りに、
$ docker pull apache/couchdb:2.0.0
Error response from daemon: manifest for apache/couchdb:2.0.0 not found
となった。latest の 2.1.0 なら pull できるが目的のバージョンではなかった。
いくらかGoogle先生で検索を繰り返し、Short Description に "Official Apache CouchDB Docker image"と書かれた klaemo/couchdbを発見。 ssl を使用する場合の klaemo/couchdb-ssl が、github の apache/couchdb-dockerで紹介されている。この docker image は、Docker Hub のapache/couchdbで、詳細説明へのリンクが示されていて、そこからもリンクされていることを確認した。これらのことから klaemo/couchdb を使うことにした。
Docker Image の pull & run
klaemo/couchdb の Full Description などをみて、以下はすんなりいきました。
$ docker pull klaemo/couchdb:2.0.0
2.0.0: Pulling from klaemo/couchdb
aa18ad1a0d33: Pull complete
c9c9bce49bac: Pull complete
2cf341bb1e0c: Pull complete
36d2f0a8e0e1: Pull complete
84d05e7ec0a8: Pull complete
70dedd8d9fd5: Pull complete
bb56d024fe18: Pull complete
4dfb5272a814: Pull complete
82c46c798747: Pull complete
cf16d4df85d7: Pull complete
Digest: sha256:7ddcf7c3c2ff7c0725d081840c914ebf6cb4cdf0730d67d15abcc64a0f9c195d
Status: Downloaded newer image for klaemo/couchdb:2.0.0
で、うまくいったようなので実行。
$ docker run --name mycouchdb -p 5984:5984 -d -v $(pwd):/opt/couchdb/data -e COUCHDB_USER=xxx -e COUCHDB_PASSWORD=xxx klaemo/couchdb:2.0.0
d225a0e625b0173ac0bd7455f3ba111916a4c4e76170e45b400ed97a1621f035
ということでうまくいきました。
ちょっと強引(?)なチャレンジ
Mac にインストールしてあった couchbakcup の couchrestore を使って、たまたまとってあったバックアップをリストアすると、うまく利用していた状態が復元されました。
$ cat backup.json | couchrestore --db mydb
================================================================================
Performing restore on http://localhost:5984/mydb using configuration:
{
"bufferSize": 500,
"parallelism": 5
}
================================================================================
couchbackup:restore restored 82 +0ms
couchbackup:restore finished { total: 82 } +20ms
アプリを起動して、無事動作確認終了。
Mac の CouchDB 2.0.0 は次の場所にデータを作っているらしいので、そこをコピーして docker run するときにそのコピー先のディレクトリを指定してみたが、うまくデータをロードできないというエラーが Fauxton の画面に表示されてデータは参照できなかった。ちょっと強引だった模様。
~/Library/Application\ Support/CouchDB2/var/lib/couchdb/
追記 (2017-10-02 09:24 JST)
Issue #840 にfix版の 2.1.0 のアーカイブファイルへのリンクが公開されました。Issue を登録した人がクイックにテストして問題がなかったようで、Issue #840 はクローズされたようです。ローカルに一応ダウンロードしておくことにしました。