我正在Docker容器中运行redis-server。它在127.0.0.1端口6379上运行。
在容器内: 当我在容器内部时,能够连接到redis-server并处理命令,没有问题。
从主机: 当我使用redis-cli monitor从主机连接到容器时,它会出现错误:Error: Server closed the connection。
如果我只是执行redis-cli
,它会给出提示符;
127.0.0.1:6379>
127.0.0.1:6379> set www yee
Error: Server closed the connection
看起来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
。
日志级别设置为debug,但日志中没有显示任何有关连接尝试和拒绝的信息。
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
如果有任何调试技巧,这将非常有帮助;