【问题标题】:Could not connect to Redis at 127.0.0.1:6379: Connection refused in docker无法在 127.0.0.1:6379 连接到 Redis:docker 中的连接被拒绝
【发布时间】:2017-07-20 15:25:12
【问题描述】:

我正在使用 redis-server:latest 图片。我使用“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] 01 Mar 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


    【解决方案1】:

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

    【讨论】:

    • 嗨,克里斯。非常感谢您的回复。我尝试了以下操作:“docker run -it --name="redis3" -p 6000:6379 redis:1 bash”然后我进入容器。我输入了“redis-cli”,它给我带来了错误:无法在 127.0.0.1:6379 连接到 Redis:连接被拒绝。很抱歉,我对 docker 和 redis 都不太陌生。你能告诉我如何让它在容器内运行吗?
    • 我明白了。运行“sudo service redis-server start”并解决了问题。
    • 6000:6379 这意味着您将端口 6379 从容器内部映射到主机上的端口 6000。这就是为什么第一次无法在6379 连接
    • 我应该这样做docker run -p 6379:6379 redis
    【解决方案2】:

    如果您收到此错误:

    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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        我使用的是从我的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 一样)。

        【讨论】:

          最近更新 更多