2

これをできる限り簡単にして、例として始めます。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 によってランダムに配置されます)。私が間違っている場合は、私を修正してください。

4

0 に答える 0