gpt4 book ai didi

docker - 无法从另一个 docker 容器连接到 redis

转载 作者:IT王子 更新时间:2023-10-29 06:00:21 27 4
gpt4 key购买 nike

我在 docker 容器中运行 redis-server。它在 127.0.0.1 端口 6379 上运行。

在容器中: 我能够在容器内连接到 redis-server 并毫无问题地处理命令。

来自主持人:当我使用 redis-cli 监视器从主机到容器执行 redis-cli 时,它给出了错误:服务器关闭了连接。

如果我只是执行 redis-cli ,它会给出提示;

127.0.0.1:6379> 
127.0.0.1:6379> set www yee
Error: Server closed the connection

这似乎是 docker 公开了正确的端口并且 docker 端口映射正在工作。失败不在于建立连接,而是连接很快就终止了。

来自同一 docker(桥)网络上的另一个容器:

redis.on('error', function(err) {    
logger.error('Redis error: ' + err);
} );

Redis error: Redis connection to 172.18.0.2:6379 failed - connect ECONNREFUSED 172.18.0.2:6379

我的 redis.conf 文件有 protected-mode no

日志记录设置为调试,但日志中也没有显示连接已尝试和拒绝的信息。

redis 客户端一直在超时重试,但每次连接都被拒绝。我尝试在 docker 网络上同时使用容器名称(作为主机名)和容器 IP 地址,两种情况下的结果都是相同的。

docker network create redisnet
docker run --name redis -p 6379:6379 -d --net "redisnet" redis-server
docker run --name apiserver -p 81:8080 --net "redisnet" -d api-server

If I try to ping it from another container on the same net:
docker run -it --rm --net redisnet redis redis-cli -h redis ping
Could not connect to redis at redis:6379: Connection refused

如果有任何调试提示,这将非常有帮助;

最佳答案

我通过在 redis.conf 中注释掉以下行来解决这个问题。

# bind 127.0.0.1

当redis在容器上启动并连接到docker网络时,会在该网络上为redis创建一个新接口(interface),这个接口(interface)有自己的ip地址。例如,docker 网络可以分配 172.18.0.2/24 范围内的地址,而 redis 容器可以分配 172.18.0.2。并非总是可以预测哪个 IP 地址将分配给 redis,除非有人在 docker run 命令中明确分配了 ip 地址。唯一的选择是在 redis.conf 中注释绑定(bind),这将允许 Redis 现在在所有接口(interface)上监听对 6379 的请求。

这解决了问题,我可以从另一个容器连接到 redis。

关于docker - 无法从另一个 docker 容器连接到 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50559985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com