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(master, slave) 中,我们需要将 ip 地址相互放置,例如(master)

来自 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

我需要一些与服务名称相同的变量,因此在此示例中,主服务器和此值需要具有有效的 IP 地址。否则,这不可能起作用,因为每个服务的 IP 地址将由 swarm 动态更改(容器由 swarm 随机放置)。如果我错了,请纠正我。

4

0 回答 0