如何从 Docker 容器连接到本地 Redis 服务器?

Posted

技术标签:

【中文标题】如何从 Docker 容器连接到本地 Redis 服务器?【英文标题】:How to connect to a local Redis server from a Docker container? 【发布时间】: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,但我收到错误消息,指出该地址已在使用中。

提前致谢!

【问题讨论】:

【参考方案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

以上是关于如何从 Docker 容器连接到本地 Redis 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器

无法从 docker 容器内的 Spring Boot 连接到 Redis

如何将我的 Spring Boot 应用程序连接到 Docker 上的 Redis 容器?

从 docker 容器连接到本地 mongodb

如何从 Angular Nginx 容器连接到 Node API docker 容器

从外部连接到 docker 容器中的 Postgresql