【问题标题】:How to connect to a local Redis server from a Docker container?如何从 Docker 容器连接到本地 Redis 服务器?
【发布时间】:2018-05-02 18:02:15
【问题描述】:

我正在尝试从 Docker 容器内部连接到我机器上的本地 Redis 服务器。到目前为止我做了什么:

  • Redis 正在我的机器上运行(可以通过 redis-cli 连接到它)
  • 启动了一个交互式 Docker 容器(来自 Ubuntu 映像)
  • 在容器内安装了“redis-tool”
  • 尝试通过 redis-cli 连接到 Redis:
    > redis-cli -h 172.17.0.3 -p 6379
    (通过容器内的ifconfig获取IP地址)
  • 收到错误提示“连接被拒绝”

为了获得有效的连接,我没有想到什么技巧?

我已经尝试在我的redis.conf 中设置“绑定 0.0.0.0”,但这没有任何效果。我也尝试在运行容器时将端口 6379 转发到 6379,但我收到错误消息,指出该地址已在使用中。

提前致谢!

【问题讨论】:

    标签: docker redis


    【解决方案1】:

    您不应该连接到容器的 IP 地址,而是主机的 IP(您在主机上看到的 Docker 桥接器的 IP)。看你的问题应该是172.17.0.1

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    你可以这样做:

    • 获取主机的 IP,例如在环境变量$host_ip
    • 运行 docker 命令,例如:
      docker run -it --add-host redis_server:$host_ip ubuntu bash
      

    现在,您可以从容器内部通过主机名redis_server 访问 Redis 服务器,该主机名在您的主机上运行。

    【讨论】:

      【解决方案3】:

      只要使用这个命令

      "docker run --network=host -p port:port IMAGE"

      不仅是 Redis,您在 localhost 上运行的所有服务都可以在 docker 上使用。

      【讨论】:

        【解决方案4】:

        在容器之间使用链接
        docker run -d --name=redis_xyz redis

        docker run -it --link redis_xyz:redis_local redis_cli_image redis-cli -h redis_local

        【讨论】:

        • 感谢您的评论,但我不想在容器内运行 redis!
        • 对不起。所以尝试在 redis-cli 容器中:redis-cli -h 0.0.0.0 或 redis-cli -h HostIP。 172.17.0.3 是容器 IP。使用 -h HostIP 或 -h 0.0.0.0