当前位置: 首页 > 知识库问答 >
问题:

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

陆英毅
2024-05-06

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/6844903716290576392appendonly yes#default: 持久化文件appendfilename "appendonly.aof"#default: 每秒同步一次appendfsync everysecport 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 6377Error while reading from 127.0.0.1:6377 : (104, 'Connection reset by peer') retrying... retry left: 2Error while reading from 127.0.0.1:6377 : (104, 'Connection reset by peer') retrying... retry left: 1iredis  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.ioIssues: https://iredis.io/issues127.0.0.1:6377> exit

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

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


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

共有2个答案

弘烨烁
2024-05-06

问题排查

  • 启动服务后 进入容器

    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
卜泓
2024-05-06

你的 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,看看是否能成功连接。

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

 类似资料:
  • 我在EC2上有两个服务器。一个托管我的php应用程序,另一个托管我的redis服务器。我在redis服务器上管理我的php会话和数据。因此,在我的php服务器上,我将ip:port作为会话保存路径,并在stderr中收到了错误FastCGI:“php消息:php致命错误:未捕获异常‘redisception’,消息‘Connection closed’” 我需要在我的redis实例上为入站流量打开

  • 我在AWS ec2实例上设置了一个redis服务器,如下所示https://medium.com/@andrewcbass/install-redis-v3-2-on-aws-ec2-instance-93259d40a3ce 我正在另一个ec2实例上运行python脚本 在redis服务器的安全组中,我允许端口6379上的入站流量 运行上述脚本时,我遇到以下错误: 我已经尝试过更改conf文件中

  • pika当前支持的redis接口 pika支持redis五种类型(分别为string、hash、list、set、zset)的接口,先列出其对redis的五种数据结构兼容统计。 统计所用的标记含义如下: 图标 含义 o 该接口完全支持,使用方式与redis没有任何区别 ! 功能支持,但使用或输出与redis有部分差异,需注意 × 当前还未支持 Keys 接口 DEL DUMP EXISTS EXP

  • 本文向大家介绍React为什么不要直接修改state?如果想修改怎么做?相关面试题,主要包含被问及React为什么不要直接修改state?如果想修改怎么做?时的应答技巧和注意事项,需要的朋友参考一下 不能直接修改state,组件修改state,并不会重新触发render. state的更新是异步的,调用setState时,组件state并不会立即改变,只是把要修改的状态放入事件队列当中. this

  • 默认情况下,Tomcat配置的默认端口是8080。这就是为什么所有已部署的Web应用程序都可以通过URL访问的原因:http://localhost:8080/yourapp。如果希望应该在80端口上运行,则需要将默认端口8080更改为80,这是HTTP连接器的默认端口。 要更改此端口,请打开并找到以下内容: 更改为以下内容: 修改后,您可以使用"http://localhost/"来访问您的应用

  • 问题内容: 我正在尝试建立一个实现和的类。这两个接口都定义了方法,但是返回类型不同: K的类型擦除导致这两个方法签名冲突。我不能拥有它们中的一个,因为它是一个无效的覆盖,并且我不能拥有两个,因为它们具有相同的签名。有什么方法可以使这两个接口共存? 问题答案: 我认为在这种特殊情况下是不可能的。如果两个类都返回了对象类型,那么您将有机会,但是由于您混合了基本类型和对象类型,因此没有兼容的类型同时支持