Postgresql 使用静态IP在两个容器之间进行通信

Postgresql 使用静态IP在两个容器之间进行通信,postgresql,docker,docker-compose,dockerfile,wal,Postgresql,Docker,Docker Compose,Dockerfile,Wal,盖伊,我正试图用postgres和WAL技术在我的机器上创建WAL冗余,但我需要在postgres上的.conf文件中设置一些静态ip配置,我正在使用Docker和Docker compose来实现这一点,但我遇到了一个问题,它不起作用!!哈哈 version: '3' services: master: build: dockerfile: ./Master/Dockerfile context: .

盖伊,我正试图用postgres和WAL技术在我的机器上创建WAL冗余,但我需要在postgres上的.conf文件中设置一些静态ip配置,我正在使用Docker和Docker compose来实现这一点,但我遇到了一个问题,它不起作用!!哈哈

version: '3'
services: 
    master:
        build: 
            dockerfile: ./Master/Dockerfile
            context: .
        restart: always
        image: master_psql
        container_name: master
        hostname: master
        ports: 
            - 5432:5432
        volumes: 
            - ./master_volume:/var/lib/postgresql
        networks: 
            psql-network:
                ipv4_address: 192.168.200.2

    slave:
        build:
            dockerfile: ./Slave/Dockerfile
            context: .
        restart: always
        image: slave_psql
        container_name: slave
        hostname: slave
        ports: 
            - 5433:5432
        volumes: 
            - ./slave_volume:/var/lib/postgresql
        networks: 
            psql-network:
                ipv4_address: 192.168.200.3
        depends_on: 
            - master

networks: 
    psql-network:
        driver: bridge
        ipam: 
            config: 
                - subnet: 192.168.200.0/32
这是我的docker compose,我正在尝试使用
docker compose up-d
并收到此错误:
错误:对于主用户,仅当连接到具有用户配置的子网的网络时,才支持指定的IP地址

我的dockerfile是:

大师:

FROM postgres:12

RUN apt update && \
    apt install -y vim-tiny \
    net-tools

COPY ./Master/postgresql.conf /postgresql.conf
COPY ./Master/pg_hba.conf /pg_hba.conf

COPY ./Scripts/init.sql /docker-entrypoint-initdb.d/
COPY ./Scripts/set-config_master.sh /docker-entrypoint-initdb.d/set-config_master.sh

EXPOSE 5432
奴隶:

FROM postgres:12

RUN apt update && \
    apt install -y vim-tiny \
    net-tools

COPY ./Slave/postgresql.conf /postgresql.conf
COPY ./Slave/recovery.conf /recovery.conf

COPY ./Scripts/init.sql /docker-entrypoint-initdb.d/
COPY ./Scripts/set-config_slave.sh /docker-entrypoint-initdb.d/set-config_slave.sh

EXPOSE 5433
你知道我怎么处理这个问题吗?或者,如果你们知道使用docker创建此结构的简单教程,我将连续2或3天对此进行研究

谢谢

编辑:
docker网络ls

NETWORK ID          NAME                                  DRIVER              SCOPE
23f667e0fa76        aluradockercap06_production-network   bridge              local
56a50842c153        booksearcher_development-network      bridge              local
f1a8e3fa98a9        bridge                                bridge              local
51d08684435f        dockerfile_default                    bridge              local
06ece1ec80aa        host                                  host                local
75835a527e89        my-network                            bridge              local
a566503cb776        none                                  null                local
e1c6830c371a        postgres_psql-network                 bridge              local
2754168d75b0        projeto_default                       bridge              local

首先,您的网络子网是192.168.200.0/32,这意味着192.168.200.0是包含的唯一地址。我认为您可能打算使用192.168.200.0/24您几乎不需要在Docker中手动配置IP(在这个
Docker compose.yml
文件的上下文中,
master
slave
将可用作主机名);这个配置真的需要它吗?除了所有
网络:
块之外,您可能还可以删除
容器名称:
主机名:
。我需要在配置时打开两个容器之间的通信,而不是启动容器,然后配置它们。。这就是为什么我需要配置静态IP,我没有尝试使用主机名进行连接。root@master:/#ping slave ping slave(172.26.0.3)56(84)字节的数据。来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=1 ttl=64 time=0.131 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=2 ttl=64 time=0.057 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=3 ttl=3 ttl=0.055 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=4 ttl=64 time=0.066 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=5 ttl=64 time=0.054 ms正常工作。我仍然需要静态IP。。。当我将主机名放入pg_hba.conf时,不允许使用主机名。------master 2019-12-08 23:21:02.109 UTC[1]上下文:配置文件/var/lib/postgresql/data/pg|u hba.conf“master 2019-12-08 23:21:02.109 UTC[1]致命:无法加载pg|u hba.conf master 2019-12-08 23:21:02.110 UTC[1]日志:数据库系统已关闭------主机复制postgres slave/32 Trust作为启动器您的网络子网是192.168.200.0/32,这意味着192.168.200.0是包含的唯一地址。我认为您可能打算使用192.168.200.0/24您几乎不需要在Docker中手动配置IP(在这个
Docker compose.yml
文件的上下文中,
master
slave
将可用作主机名);这个配置真的需要它吗?除了所有
网络:
块之外,您可能还可以删除
容器名称:
主机名:
。我需要在配置时打开两个容器之间的通信,而不是启动容器,然后配置它们。。这就是为什么我需要配置静态IP,我没有尝试使用主机名进行连接。root@master:/#ping slave ping slave(172.26.0.3)56(84)字节的数据。来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=1 ttl=64 time=0.131 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=2 ttl=64 time=0.057 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=3 ttl=3 ttl=0.055 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=4 ttl=64 time=0.066 ms来自slave.postgres_psql-network的64字节(172.26.0.3):icmp_seq=5 ttl=64 time=0.054 ms正常工作。我仍然需要静态IP。。。当我将主机名放入pg_hba.conf时,不允许使用主机名。------master 2019-12-08 23:21:02.109 UTC[1]上下文:配置文件/var/lib/postgresql/data/pg|u hba.conf“master 2019-12-08 23:21:02.109 UTC[1]致命:无法加载pg|u hba.conf master 2019-12-08 23:21:02.110 UTC[1]日志:数据库系统已关闭------主机复制postgres slave/32信任