とりあえず consul だけ入れたdockerイメージを作る
Dockerfileは超簡単に
FROM ubuntu
MAINTAINER tsuyukimakoto
RUN apt-get -qq update
RUN apt-get install -yqq wget unzip
RUN wget https://dl.bintray.com/mitchellh/consul/0.3.0_linux_amd64.zip
RUN unzip 0.3.0_linux_amd64.zip && mv consul /tmp/consul
# Consul port -> DNS HTTP RPC SERF_LAN SERF_WAN SERVER
EXPOSE 8600/TCP 8600/UDP 8500/TCP 8500/UDP 8400/TCP 8400/UDP 8301/TCP 8301/UDP 8302/TCP 8302/UDP 8300/TCP 8300/UDP
イメージをビルド
$ sudo docker build --no-cache --rm -t tsuyukimakoto/consul .
起動してみる
$ sudo docker run -i -t tsuyukimakoto/consul /bin/bash
とりあえず起動を3回繰り返して3つ起動してみた。
おっさんだけどipコマンドで確認してみたところ、172.17.0.34と172.17.0.35と172.17.0.36だった。
172.17.0.35でサーバとして起動してみる
# /tmp/consul agent -server -bootstrap -data-dir=/tmp/consul_data -bind=172.17.0.35 -client=172.17.0.35
単独なので選挙に勝った
2014/07/05 12:15:55 [INFO] serf: EventMemberJoin: 10a6653b6910 172.17.0.35
2014/07/05 12:15:55 [INFO] serf: EventMemberJoin: 10a6653b6910.dc1 172.17.0.35
2014/07/05 12:15:55 [INFO] raft: Node at 172.17.0.35:8300 [Follower] entering Follower state
2014/07/05 12:15:55 [INFO] consul: adding server 10a6653b6910 (Addr: 172.17.0.35:8300) (DC: dc1)
2014/07/05 12:15:55 [INFO] consul: adding server 10a6653b6910.dc1 (Addr: 172.17.0.35:8300) (DC: dc1)
2014/07/05 12:15:55 [ERR] agent: failed to sync remote state: No cluster leader
2014/07/05 12:15:56 [WARN] raft: Heartbeat timeout reached, starting election
2014/07/05 12:15:56 [INFO] raft: Node at 172.17.0.35:8300 [Candidate] entering Candidate state
2014/07/05 12:15:56 [INFO] raft: Election won. Tally: 1
2014/07/05 12:15:56 [INFO] raft: Node at 172.17.0.35:8300 [Leader] entering Leader state
2014/07/05 12:15:56 [INFO] consul: cluster leadership acquired
2014/07/05 12:15:56 [INFO] consul: New leader elected: 10a6653b6910
2014/07/05 12:15:56 [INFO] consul: member '10a6653b6910' joined, marking health alive
クライアントはサーバを知らないって言う
2014/07/05 11:22:38 [ERR] agent: failed to sync remote state: No known Consul servers
お互いのIPを知らないという前提で、その前提からするとこれは困った。サービスレジストリ自体が機能しない。
ネットワークの設定が間違ってる?んじゃないと思って先に進む。