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

我看到很多人为此苦苦挣扎,觉得可能是redis容器映像中存在一个bug,而其他人似乎也在追逐类似的问题。

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

像这样运行它:

docker run -it -p 6379:6379 redis bash 

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

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

我已经尝试设置,如下图。

 bind 127.0.0.1 

并从configuration中删除绑定

并尝试closures保护模式

 protected-mode no 

我知道它正在读取configuration文件,因为我只是为了testing而改变了端口,而且我能够做到这一点。

我正在运行Windows 10,所以也许这是一个Windowsnetworking问题。 我从来没有正常的docker问题。 我感到困惑

问题是你的绑定,你应该设置以下内容:

 bind 0.0.0.0 

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

默认设置是bind 127.0.0.1 ,这个设置将使得redis只在loopback接口上侦听,并且只能从容器内访问。 (为了安全)

使用自定义configuration文件运行redis:

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

现在在Docker主机上安装redis-tools进行validation:

 sudo 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'