これをできる限り簡単にして、例として始めます。postgresql レプリケーションと、それを使用する Web アプリを構成する必要があると想像してください。docker-compose.yml は次のようになります
web:
build: ./webapp/web
ports:
- "7000:7000"
links:
- pgpool2
pgpool2:
build: ./pgpool2
ports:
- "9999:9999"
links:
- master
- slave
master:
build: ./master
ports:
- "5432:5432"
slave:
build: ./slave
links:
- master
dockerfiles(マスター、スレーブ)内で、たとえば(マスター)など、互いにIPアドレスを配置する必要があります
Ubuntuから
....
RUN echo "host replication repuser 172.17.0.3/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN echo "host all all 172.17.0.2/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN echo "host all all 172.17.0.2/0 trust" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN echo "host all pgpool 172.17.0.4/0 trust" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN echo "host all all 172.17.0.4/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
.....
この解決策は醜いですが、IPアドレスを自分で入力する代わりにいくつかの変数を入れても問題があります。docker swarm は、利用可能なすべてのホストのコンテナーを置きます (各コンテナーの IP アドレスは変化しています)。それが機能する唯一の解決策は、有効なIPアドレスを持つ変数を配置することです。たとえば、この行がある場合
RUN echo "host all all 172.17.0.2/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
サービスのような同じ名前の変数が必要なので、この例では master とこの値に有効な IP アドレスが必要です。そうしないと、各サービスの IP アドレスが swarm によって動的に変更されるため、これが機能する可能性はありません (コンテナは swarm によってランダムに配置されます)。私が間違っている場合は、私を修正してください。