【问题标题】:Redis Docker connection refusedRedis Docker 连接被拒绝
【发布时间】:2016-02-14 00:59:29
【问题描述】:

我刚刚构建了redis docker实例

$ docker pull redis

之后我像这样运行它。

$ docker run --name=redis --detach=true --publish=6379:6379 redis

我得到以下内容

$ docker ps 
key        redis   "/sbin/entrypoint.sh"    22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   redis

对我来说,以上意味着它现在正在侦听 localhost 或 127.0.0.1 或 0.0.0.0 上的端口 6379。

但令我惊讶的是,当我尝试连接时,却以连接被拒绝的方式响应。

请有人可以点亮一下。

【问题讨论】:

  • 如果您正在运行 boot2docker(或在任何其他虚拟机中),您需要使用虚拟机的 IP 而不是 localhost。如果您使用的是docker-machine,您可以找到与docker-machine ip default 一起使用的正确IP。
  • 以防万一,我只是更改了端口,它工作得很好。我之前尝试过不同的解决方案,但没有任何效果。

标签: redis docker boot2docker dockerfile docker-compose


【解决方案1】:

您需要提供有关您的环境(操作系统、Docker 安装等)的更多信息,但基本上,如果您像这样启动 Redis 容器:

docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest

无论如何它都应该暴露端口。您可能无法连接到它的唯一原因是,如果您弄乱了网桥接口,如果您使用的是 Linux,或者您使用的是具有自己的网络接口和 IP 地址的 docker 机器,而您重新连接到该 IP 地址。如果你使用 Docker for Mac,那么它只支持路由到 localhost 地址,因为 Mac 主机上的桥接还不起作用。

无论如何,在带有 Docker for Mac(不是旧的 Docker Toolbox)的 MacOS 上,以下内容应该足以让您入门:

➜  ~ docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
6bfc6250cc505f82b56a405c44791f193ec5b53469f1625b289ef8a5d7d3b61e
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6bfc6250cc50        redis:latest        "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:6379->6379/tcp   redis-devel
➜  ~ redis-cli ping
PONG
➜  ~ 

【讨论】:

    【解决方案2】:

    找到redis的发现端口并使用它来连接

    docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
    

    【讨论】:

    • 这就是我想要的。上面的命令给出了一个在默认端口 6379 上连接的 IP 地址
    【解决方案3】:

    如果您使用Redis 6.2 configuration example 作为起点(就像我遇到这个问题时那样),bind 127.0.0.1 指令和protected-mode yes 的组合不允许在 Docker 容器之间进行通信。出于我的目的,我注释掉了bind 指令并将protected-mode 指令设置为no——但请注意提供的关于不要将Redis 暴露于开放互联网的警告。

    【讨论】:

      【解决方案4】:

      我推荐你使用 docker-compose https://docs.docker.com/compose/

      在你的 docker-compose.yml

      redis:                                                                          
        image: redis
      ports:
        - "6379:6379" 
      

      之后你就可以运行了:

      $ docker-compose run redis /bin/bash
      $ redis-server
      $ redis-cli ping
      

      应该返回:PONG

      【讨论】:

        【解决方案5】:

        看起来是redis客户端导致的网络问题,因为你的redis服务器看起来不错。

        请注意,redis docker 页面有点混乱。它说要通过 redis-cli 连接到你的 redis,你应该输入:

        docker run -it --network some-network --rm redis redis-cli -h some-redis

        然而,这会创建另一个 docker 容器,它基本上是 redis 客户端。它无法连接到您的 redis 服务器,因为它们没有连接到同一个网络。

        你可以做一些不同的事情,如下所示:

        docker network create some-network
        docker run --name redis-server --network some-network -d redis
        docker run -it --network some-network --rm redis redis-cli -h redis-server
        

        另一个选项是确实像您一样映射端口 6379,但是您需要使用 redis 客户端,该客户端应下载到您自己的计算机上。

        【讨论】:

          猜你喜欢
          • 2017-07-10
          • 2019-01-22
          • 2021-01-24
          • 2015-12-13
          • 2021-09-18
          • 1970-01-01
          • 2021-07-17
          • 2017-05-09
          • 2021-10-22
          相关资源
          最近更新 更多