无法连接到位于 127.0.0.1:6379 的 Redis:docker 中的连接被拒绝

问题描述 投票:0回答:7

我正在使用 redis-server:最新映像。我使用“docker run -it --name =“redis2”redis:1 bash”命令并进入容器。我看到redis默认监听端口:6379。

Running in stand alone mode

Port: 6379

PID: 39

http://redis.io

[39] 01 Mar 09:03:45.669 # Server started, Redis version 2.8.4 [39] 01 Mar 09:03:45.669 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. 

要解决此问题,请将“vm.overcommit_memory = 1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。 [39] 3 月 1 日 09:03:45.669 * 服务器现在已准备好接受端口 6379 上的连接

然后就没有任何反应了。我尝试了“redis-cli ping”。没有回应。然后我点击“ctrl+c”并输入“redis-cli ping”并得到以下响应:

Could not connect to Redis at 127.0.0.1:6379: Connection refused

我尝试通过执行以下命令将端口更改为 6001:

redis-server --port 6003

我看到以下回复:

Running in stand alone mode

Port: 6003

PID: 47

我再次尝试“redis-cli ping”,它给我带来了同样的错误:

Could not connect to Redis at 127.0.0.1:6379: Connection refused

我该如何解决这个问题?我还更新了“/etc/redis/redis.conf”位置中的端口(新端口 6003)。

谢谢你

docker redis
7个回答
23
投票

Redis 正在侦听内部 docker 网络上的该端口,要从本地计算机访问它,您需要使用 -p 6379:6379 将容器端口映射到本地端口。这样,如果您有多个 Redis 容器,您可以将它们分别映射到计算机上的不同端口。


6
投票

嗯,已经有一段时间了,但其他人也面临着同样的问题;当您将“sh”命令放入“docker run”中时,它会替换启动 Redis 服务器的默认命令。 因此,您可以在单独的终端(如“docker run redis”)中启动容器,并在另一个终端中运行“docker exec -it #container_id sh” 这是在主进程中启动容器然后将正在运行的 shell 附加到其上或按照 Chris 建议将容器端口映射到本地端口的更常见方法。


6
投票

如果您收到此错误:

Could not connect to Redis at 127.0.0.1:6379: Connection refused

您可能需要对 redis-server 进行守护进程,以便 docker 可以连接到它:

/usr/local/bin/redis-server --daemonize yes

然后再次尝试运行

redis-cli ping


1
投票

对于未来的观众:

  1. 运行

    sudo docker container ls
    以获取所有正在运行的 docker 容器

  2. sudo docker exec -it <redis_container_name> redis-cli -h <ec2_ip_address> -p 6379:6379 FLUSHALL 

希望这对您有所帮助。


0
投票

好吧,我今晚也遇到了同样的问题。

我使用的是从我的

docker-compose.yml
创建的 Redis 容器:

redis:
    container_name: 'myproject-redis'
    image: redis:latest
    ports:
      - "127.0.0.1:${HOST_MACHINE_REDIS_PORT}:6379"

我的解决方案是使用容器“ID”->这里的“redis”而不是使用普通的连接IP

127.0.0.1

为什么?我假设我的 Docker 正在创建一个直接连接到所创建容器的桥(就像 MySQL 经常出现的情况一样)。


0
投票

我使用[电子邮件受保护]遇到了同样的问题,当传递主机和端口时,我在nodejs中收到了相同的连接错误消息。使用较低版本(3.1.2)对我有用。此外,我在文档中读到 [email protected] 接受连接网址。


0
投票

我正在使用 laravel docker 项目。我必须更改 .env 中的 REDIS_HOST 变量。

之前:

REDIS_HOST=127.0.0.1

之后:

REDIS_HOST=redis
© www.soinside.com 2019 - 2024. All rights reserved.