无法创建服务器 TCP 监听套接字 *:6383 绑定:无法在 docker 上的 redis 集群中分配请求的地址(在 Windows 中)
Posted
技术标签:
【中文标题】无法创建服务器 TCP 监听套接字 *:6383 绑定:无法在 docker 上的 redis 集群中分配请求的地址(在 Windows 中)【英文标题】:Could not create server TCP listening socket *:6383 bind: Cannot assign requested address in redis clustering on docker (in windows) 【发布时间】:2021-12-15 15:05:50 【问题描述】:我正在尝试在 windows docker 上设置 redis 集群。 它只能在 redis-cli -h 127.0.0.1 -p 6383 inside docker container CLI 中正常工作,所有节点都很好,集群没有问题。这是 redis.config 文件节点之一
redis.config 文件
port 6383
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
问题出在上面的配置,应用无法访问集群,因为应用无法访问集群(这个应用在redis单模式下运行正常)
当我将“绑定”redis.conf 文件更改为我的计算机 IP 192.168.3.205 时,我收到此错误 enter image description here
我尝试了以下方法:
-
在防火墙卷中打开上述端口
使用 telnet 命令似乎没有人在此端口上监听
远程登录 192.168.3.205 6383 和 127.0.0.1 6383
-
在 netstat prot 6383 未被任何人使用
这是我的 .yml 文件
version: "3.8"
networks:
default:
name: amin-cluster
services:
redis0:
container_name: node-0
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6379\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-0
restart: always
redis1:
container_name: node-1
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6380\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-1
restart: always
redis2:
container_name: node-2
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6381\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-2
restart: always
redis3:
container_name: node-3
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6382\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-3
restart: always
redis4:
container_name: node-4
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6383\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-4
restart: always
redis5:
container_name: node-5
image: mnadeem/redis
network_mode: "host"
volumes:
- C:\Windows\System32\6384\redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
build:
context: .
dockerfile: Dockerfile
hostname: node-5
restart: always
【问题讨论】:
你能说明你是如何启动容器的吗?您很可能忘记发布端口(将主机端口绑定到容器端口) @Matthew 我在 redis.conf 文件中设置了端口,然后我使用 ">docker-compose up -d " 我需要在其他地方设置端口还是我想如何告诉容器从特定端口开始。在单模式下,我选择容器的图像名称,并告诉端口如 6060:6379 但这里我不知道 我添加了一个应该有帮助的答案,redis 团队自己提供的标准 redis 图像也非常可靠,使用 3rd 方图像有什么特别的理由吗? (mnadeem/redis),编辑:nvm 我看到这些图像是针对集群的。 @Matthew 抱歉,我在其文档中找不到 docker 的任何集群配置。我还在努力我似乎被卡住了你有什么指导可以使用这个标准的 Redis 映像在 docker 上实现 Redis 集群吗? 不确定,但如果您需要更多帮助,您应该问第二个问题。对于访问端口的紧迫问题,我提供的答案是否解决了问题? 【参考方案1】:在您的 docker compose yml 中,您需要发布端口,并为您希望从主机访问的每个服务设置一个。
redis0:
ports:
- "6383:6383"
...
redis1:
ports:
- "12345:6383"
语法是“hostport:containerport”,因为您有 6 个 redis 实例,假设您希望每个可访问的每个主机端口都需要不同。
如果您不需要从主机访问端口,您显然可以省略端口。
有关如何发布端口的更多详细信息,请阅读 docker compose yml docs https://docs.docker.com/compose/compose-file/compose-file-v3/#ports
【讨论】:
谢谢你,我通过了这个问题,但不是完全。尝试使用命令“redis-cli --cluster create以上是关于无法创建服务器 TCP 监听套接字 *:6383 绑定:无法在 docker 上的 redis 集群中分配请求的地址(在 Windows 中)的主要内容,如果未能解决你的问题,请参考以下文章