redis 的 redisbloom 想要修改兼容的端口为非 6379 但无效?

redis 的 redisbloom 想要修改兼容的端口为非 6379 但无效?

docker-compose.yaml

version: "3"

services: 
  redis:
    container_name: rebloom2
    restart: always
    image: redislabs/rebloom:2.6.12
    ports:
      - "6377:6377"
    volumes:
      - ./volumes:/data # /usr/local/redis/data 是你宿主机的路径;/data 是容器内的路径,容器内的 redis 会把需要持久化的数据都保存到 /data 目录下
      - ./redis.conf:/etc/redis/redis.conf # redis.conf 这个文件已经准备好了,可以放到这个路径,也可以自己修改,比如放到项目路径中
# 这个文件的地址,和你的 docker-compose.yaml 中的 /usr/local/redis/redis.conf:/etc/redis/redis.conf 冒号左边的要对应起来
# redis 支持两者持久化机制:RDB&AOF
# https://juejin.cn/post/6844903716290576392

appendonly yes
#default: 持久化文件
appendfilename "appendonly.aof"
#default: 每秒同步一次
appendfsync everysec

port 6377
# 绑定端口,不指定外网可能连不上服务器
bind 0.0.0.0


# maxmemory 100mb
# appendonly yes
# appendfilename "appendonly.aof"
# appendfsync everysec

我把默认端口改成 6377 之后,客户端连不上

╭─pon@T4GPU ~
╰─➤  iredis  -h 127.0.0.1 -p 6377
Error while reading from 127.0.0.1:6377 : (104, 'Connection reset by peer') retrying... retry left: 2
Error while reading from 127.0.0.1:6377 : (104, 'Connection reset by peer') retrying... retry left: 1
iredis  1.13.2 (Python 3.10.12)
redis-server  Unknown (Error while reading from 127.0.0.1:6377 : (104, 'Connection reset by peer'))
Home:   https://iredis.io
Issues: https://iredis.io/issues
127.0.0.1:6377> exit

但是把 redis 的端口改成还是保留 6379,只是把 docker 映射端口改成 6377:6379 ,客户端就可以连接成功!

如果 redisbloom 要如何修改 redis.conf 来修改兼容的端口?和标准的 redis 不一样?


标准的 redis 这样修改成 6377 是可以的

阅读 1.4k
avatarAI BotBETA

你的 docker-compose.yaml 文件和 redis.conf 配置看起来是正确的。理论上,你应该能够将 Redis(包括 RedisBloom)的端口更改为任何你想要的值,只要确保在 docker-compose.yamlredis.conf 中都进行了相应的更改,并且确保客户端连接时使用的是新的端口。

关于你遇到的问题,这里有几个可能的原因和解决方案:

  1. Redis 没有正确读取配置文件:确保你的 Redis 容器实际上正在使用你提供的 redis.conf 文件。你可以在启动容器时添加一些日志或检查容器的文件系统,以确认配置文件是否已正确加载。
  2. 防火墙或安全组设置:如果你的服务器运行了防火墙或安全组,它们可能会阻止对端口 6377 的访问。确保你的防火墙或安全组规则允许从客户端到服务器的 6377 端口的流量。
  3. Redis 服务没有正确启动:如果 Redis 服务没有正确启动,那么客户端将无法连接。你可以检查容器的日志以查看是否有任何启动错误或警告。
  4. Docker 网络问题:Docker 有其自己的网络堆栈,有时可能会出现问题。尝试重启 Docker 服务,或者删除并重新创建容器,看看是否能解决问题。
  5. 客户端问题:确保你的客户端(在这个例子中是 iredis)支持你想要连接的 Redis 版本,并且正确配置了连接参数(主机和端口)。

为了进一步调试,你可以尝试以下步骤:

  • 使用 docker logs 命令查看容器的日志,看看是否有任何错误或警告。
  • 使用 docker exec 命令进入容器,检查配置文件是否位于正确的位置,并且是否被正确读取。
  • 尝试使用不同的客户端或工具(如 redis-cli)连接到 Redis,看看是否能成功连接。

如果以上步骤都不能解决问题,那么可能需要更深入地调查你的环境和配置设置。

1 个回答

问题排查

  • 启动服务后 进入容器

    docker exec -it rebloom2 /bin/bash
  • 查看端口是否生效

     apt-get install net-tools
     netstat -aon |grep  6377    (空)
     netstat -aon |grep  6379     (有值)
  • 说明修改端口失败
  • 查看 /etc/redis/redis.conf 已经修改过的
  • docker 容器中执行 redis-server 提示: Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
  • 查看 https://github.com/RedisBloom/RedisBloom/blob/master/Dockerfile 默认 redis-server 不带配置

    CMD ["redis-server", "--loadmodule", "/usr/lib/redis/modules/redisbloom.so"]
    

    最终结果

  • docker-compose.yaml 增加 command(最后一行)

    version: "3"
    
    services:
    redis:
      container_name: rebloom2
      restart: always
      image: redislabs/rebloom:2.6.12
      ports:
        - "6377:6377"
      volumes:
        - ./volumes:/data # /usr/local/redis/data 是你宿主机的路径;/data 是容器内的路径,容器内的 redis 会把需要持久化的数据都保存到 /data 目录下
        - ./redis.conf:/etc/redis/redis.conf # redis.conf 这个文件已经准备好了,可以放到这个路径,也可以自己修改,比如放到项目路径中
      command: redis-server /etc/redis/redis.conf  --loadmodule /usr/lib/redis/modules/redisbloom.so
    
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进