为什么redis中的主节点在docker容器中运行时无法连接到6379端口?

xpszyzbs  于 4个月前  发布在  Redis
关注(0)|答案(1)|浏览(84)

当尝试将3个Redis示例作为3个Docker容器(1个主节点和2个从节点)运行时,我收到主节点的以下错误:2023-11-18 11:12:57 1:M 18 Nov 2023 08:12:57.243 #警告:无法创建服务器TCP侦听套接字172.28.0.1:6379:bind:Cannot assign requested address 2023-11-18 11:12:57 1:M 18 Nov 2023 08:12:57.243 #在端口6379(tcp)上侦听失败,中止。
有时我得到类似的错误第二个从节点,但有时它的工作正常。
我的docker-compose文件:

networks:
  hl-lab3-network:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

services:
  server:
    build:
      context: ./server_component
    env_file:
      - .env
    ports:
      - "${PORT}:${PORT}"
    
      
  client:
    build:
      context: ./client_component

  redis-master:
    image: redis:7
    container_name: master
    command: bash -c "redis-server ./redis-master.conf --appendonly yes --requirepass password"
    ports: 
      - 6379:6379
    networks:
      - hl-lab3-network
    volumes:
      - ./:/data
  redis-slave-1:
    image: redis:7
    container_name: slave-1
    command: redis-server ./redis-slave1.conf --replicaof master 6379 --requirepass password
    ports: 
      - 6381:6381
    networks:
      - hl-lab3-network
    volumes:
      - ./redis-slave1.conf:/data/redis-slave1.conf
  redis-slave-2:
    image: redis:7
    container_name: slave-2
    command: redis-server ./redis-slave2.conf --replicaof master 6379 --requirepass password
    ports: 
      - 6382:6382
    networks:
      - hl-lab3-network
    volumes:
      - ./redis-slave2.conf:/data/redis-slave2.conf

字符串
我的配置文件:
redis-master.conf

port 6379
bind 172.28.0.1
requirepass password
replica-read-only yes


redis-slave1.conf

port 6381
bind 172.28.0.2
masterauth password
replica-read-only yes
slaveof master 6379


redis-slave2.conf

port 6382
bind 172.28.0.3
masterauth password
replica-read-only yes
slaveof master 6379


我该怎么弥补?
我试着改变端口和IP地址几次,但它根本没有帮助。

brqmpdu1

brqmpdu11#

在Docker环境中,通常依赖Docker内部网络就足够了。请尝试在.conf文件中将'bind'设置为'0.0.0.0',或者完全删除'bind'行
有一种可能性是,当你在redis配置中显式指定ip地址时,docker并不知道它。当docker尝试动态设置它的ip时,它会失败,容器不会启动。如果你仍然不想让docker自己确定ip地址,那么你可以显式设置ip。
举例来说:

redis-master:
    image: redis:7
    container_name: master
    command: bash -c "redis-server ./redis-master.conf --appendonly yes --requirepass password"
    ports:
      - 6379:6379
    networks:
      hl-lab3-network:
        ipv4_address: 127.28.0.1
    volumes:
      - ./server_component/redis-master.conf:/data/redis-master.conf

字符串

相关问题