Docker文件中的docker compose,swarm和ip地址

时间:2016-02-19 16:43:05

标签: docker docker-compose docker-swarm

我会尽我所能,我会以此为例。想象一下,我们必须配置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

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

0 个答案:

没有答案