【问题标题】:Can't connect to docker redis container from the host using StackExchange.Redis无法使用 StackExchange.Redis 从主机连接到 docker redis 容器
【发布时间】:2019-08-05 21:20:17
【问题描述】:

不确定是连接字符串的问题还是我的 docker 映像的问题。运行docker container ls我明白了

57cb0c982c76 redis "docker-entrypoint.s…" 0.0.0.0:32773->6379/tcp

端口似乎映射到外部。我试着跑了

docker run -d -P redis:alpine

使用这个和其他不同的参数变体,并使用 StackExchange.Redis C# 驱动程序,它会超时。连接字符串如下所示:

localhost:6379,ssl=True,abortConnect=False

(无密码)。我做错了什么?

更新

尝试使用docker run -d -p 6379:6379/tcp redis(也是redis:alpine)。仍然无法连接。 docker inspect 显示 HostConfig:

        "PortBindings": {
            "6379/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "6379"
                }
            ]
        }

【问题讨论】:

  • 我认为连接字符串需要使用容器的 IP 地址而不是 localhost(运行 docker inspect <containerId> 以获取该 IP 地址)
  • @egnomerator 在IP地址无用的各种情况下;我认为在 MacOS 主机上,即使从同一主机也无法访问。您永远不会直接需要它,我不鼓励查找它。

标签: c# .net docker redis .net-core


【解决方案1】:

由于您运行了docker run -P(大写为P),Docker 为容器中每个暴露的端口选择一个主机端口。 docker ps 输出中究竟是哪个端口:0.0.0.0:32773->6379/tcp 表示 Docker 已选择端口 32773,绑定到所有主机接口,转发到 TCP 端口 6379。

这意味着您的 Redis 客户端需要在面向公众的端口 32773 上连接到主机的某个 IP 地址。将连接字符串中的 6379 更改为 32773 应该可以工作。

更常见的是明确选择自己的端口; docker run -p 6379:6379(小写p)将使用主机上的“普通”Redis 端口6379 转发到容器中的Redis 端口。一个缺点是,如果其他任何东西已经在使用该端口(主机 Redis 守护进程、其他容器),这可能会失败。

【讨论】:

  • 用 redis:alpine 和 redis:latest 尝试过。没有工作。仍然无法从主机访问它...我对 docker 有点陌生,我做错了什么?
猜你喜欢
  • 2021-09-22
  • 2018-01-03
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2020-02-08
  • 1970-01-01
相关资源
最近更新 更多