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

use*_*307 27 redis docker

我看到很多人都在为此苦苦挣扎,有点觉得redis容器图像中可能存在错误,而其他人似乎正在追逐类似的问题.

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

像这样运行它:

docker run -it -p 6379:6379 redis bash
Run Code Online (Sandbox Code Playgroud)

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

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

我试过设置,如下所示.

bind 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

并从配置中删除绑定

并尝试关闭保护模式

protected-mode no
Run Code Online (Sandbox Code Playgroud)

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

我正在运行Windows 10,所以可能是Windows网络问题.我通常不会遇到码头工人的问题.我很困惑

Bri*_*mpo 35

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

下载镜像并运行容器

docker run -d --name some-redis -p 6379:6379 redis
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it some-redis bash
Run Code Online (Sandbox Code Playgroud)

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

root@72c388dc2cb8:/data# redis-cli
Run Code Online (Sandbox Code Playgroud)

输出:

127.0.0.1:6379> 
Run Code Online (Sandbox Code Playgroud)

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

  • 这与问题中所问的完全相反。他想要从主机环境(容器正在运行的环境)连接到在容器中运行的 redis-server。也就是说,如果你在linux机器上启动了一个redis容器,他想从linux机器访问它,而不是从redis容器内部访问。 (7认同)
  • 这看起来是一个很好的解决方案!我可以通过运行以下命令“docker exec -it some-redis redis-cli”直接打开“redis-cli”并跳过“bash”步骤。 (4认同)

Far*_*ahi 24

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

bind 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

这将设置redis为绑定到所有可用的接口,在具有一个接口的容器化环境中,(eth0)和loopback(lo)redis将绑定到上述两个接口.您应该考虑通过其他指令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
Run Code Online (Sandbox Code Playgroud)

现在验证redis-tools已安装的docker主机:

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> 
Run Code Online (Sandbox Code Playgroud)

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

redis-cli -h 'IP-address-of-dockerhost-running-redis-container'
Run Code Online (Sandbox Code Playgroud)


Dar*_*rek 5

现在使用版本4.0.9( Docker Toolbox on Win10)可能会更容易。只需连接一个 redis 客户端,然后:

set bind 0.0.0.0
save
Run Code Online (Sandbox Code Playgroud)

新设置在停止/启动后保持不变。


小智 5

这里有一些说明可以使这项工作正常进行。

安装官方 Docker 而不是发行版存储库。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
systemctl enable docker ; systemctl start docker; systemctl status docker
Run Code Online (Sandbox Code Playgroud)

请参阅使用便利脚本安装

从主机连接到 Redis 容器

mkdir -p /etc/redis/
chown -R 1000:1000 /etc/redis
sudo docker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/redis/:/data redis redis-server /data
Run Code Online (Sandbox Code Playgroud)

注意:对您的解决方案至关重要的重要部分是将端口公开 (-p 6379:6379) 到您的 docker 主机并路由到容器端口。请参阅Redis Docker 文档

在您的 docker 主机中安装“redis-tools”。Centos 通过 epel 发行版安装 redis。