从主机连接到在 Docker 容器中运行的 Redis

新手上路,请多包涵

我看到很多人都在为此苦苦挣扎,感觉可能是 redis 容器映像中存在错误,而其他人似乎也在追求类似的问题。

我在 DockerHub 上使用标准的 redis 映像。 ( https://github.com/dockerfile/redis )

像这样运行它:

 docker run -it -p 6379:6379 redis bash

进入后,我可以启动服务器,并从容器映像执行 redis ping。

不幸的是,我无法从我的主机连接到 redis 容器。

我尝试过设置,如下所示。

 bind 127.0.0.1

并从配置中删除绑定

并尝试关闭保护模式

protected-mode no

我知道它正在读取配置文件,因为我更改端口只是为了测试,我能够做到这一点。

我正在运行 Windows 10,所以可能是 Windows 网络问题。我通常从来没有遇到过docker问题。我很困惑

原文由 user3888307 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 714
2 个回答

问题在于您的绑定,您应该设置以下内容:

 bind 0.0.0.0

这将设置 redis 绑定到所有可用的接口,在具有一个接口的容器化环境中,( eth0 )和环回( lo )以上两者。 您应该考虑通过 config file 中的其他指令或使用 firewalls 等外部工具添加安全措施。因为通过这种方法,每个人都可以连接到您的 redis 服务器。

默认设置是 bind 127.0.0.1 这个设置会导致 redis 只监听环回接口,并且只能从容器内部访问。 (为了安全)

使用自定义配置文件运行 redis:

 sudo docker run -d --name redis-test -p 6379:6379  -v /path/to/redisconf/redis.conf:/redis.conf redis redis-server /redis.conf

现在在安装了 redis-tools 的 docker 主机上进行验证:

 redis-cli
127.0.0.1:6379>
127.0.0.1:6379> set farhad likes:stackoverflow
OK
127.0.0.1:6379> get farhad
"likes:stackoverflow"
127.0.0.1:6379>

您还可以通过以下方式从外部主机连接到您的 redis 容器:

 redis-cli -h 'IP-address-of-dockerhost-running-redis-container'

原文由 Farhad Farahi 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是设置 Redis 容器的更简单方法。

下载镜像并运行容器

docker run -d --name some-redis -p 6379:6379 redis

如果您没有图像,则此命令将拉取它。然后,如果您需要从 redis-cli 访问控制台,可以使用:

 docker exec -it some-redis bash

进入容器控制台,并在控制台中输入:

 root@72c388dc2cb8:/data# redis-cli

输出:

 127.0.0.1:6379>

这对我的用例(简单快速的本地开发)来说已经足够了。

原文由 Brian Ocampo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题