クラスターを作成するには、クラスターを形成するすべての rabbitmq ノードにノード名 (ホスト名) でアクセスできる必要があります。オプションを使用して各 docker コンテナーのホスト名を指定し--hostname
、他のすべてのコンテナーの /etc/host エントリを追加する必要があります。これは、--add-host
オプションを使用するか、/etc/hosts ファイルを手動で編集することによって実行できます。以下は、docker コンテナー (rabbitmq:3-management イメージ) を使用した 3 つの rabbitmq ノード クラスターの例です。
まず、IP を割り当てることができるようにネットワークを作成しますdocker network create --subnet=172.18.0.0/16 mynet1
。次のことを行います。
- rab1con、rab2con、rab3con という名前の 3 つの Docker コンテナ
- IP はそれぞれ 172.18.0.11 、-12 および -13 になります。
- それぞれのホスト名は、それぞれ rab1、rab2、および rab3 になります。
- すべてが同じ erlang cookie を共有する必要があります
最初のものをスピンアップ
docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
二つ目
docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
最後の一つ
docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
contaner rab2con よりも
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rab1
rabbitmqctl start_app
rab3conでも同じで、それだけです。
編集: 質問は milti-host docker ネットワークに関するものなので、オーバーレイ ネットワークを使用する必要があります。