从主机连接到在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'