You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose运行的.NET应用如何配置Redis端口实现正常访问?

问题排查与解决

核心原因

Docker Compose 启动的.NET应用容器与单独通过docker run创建的Redis容器不在同一网络环境,导致.NET容器内的localhost指向容器自身而非宿主机,无法访问宿主机映射的5005端口。

解决办法(按推荐程度排序)

1. 将Redis容器加入Docker Compose的自定义网络(快速适配现有部署)

  • 第一步:查看Docker Compose应用的网络名称
    执行命令:

    docker network ls
    

    找到对应项目的网络,名称通常为[你的项目名]_default。

  • 第二步:将Redis容器连接到该网络
    执行命令(替换[compose-network-name]为实际网络名):

    docker network connect [compose-network-name] mtg-redis
    
  • 第三步:修改.NET应用的连接字符串
    将appsettings.json中的Redis连接字符串从localhost:5005改为mtg-redis:6379——同一网络内可直接通过容器名访问,且使用Redis容器的内部端口6379(无需宿主机映射端口)。

  • 第四步:重启.NET应用容器
    执行命令(替换[app-container-name]为你的应用容器名):

    docker restart [app-container-name]
    

2. 将Redis纳入Docker Compose统一管理(推荐生产环境使用)

修改docker-compose.yml,添加Redis服务配置,让两个容器自动处于同一网络:

services:
  redis:
    image: redis
    container_name: mtg-redis
    ports:
      - "5005:6379" # 保留宿主机映射端口,方便外部调试
  dotnet-app:
    build: . # 你的.NET应用构建配置
    ports:
      - "5002:8081"
    depends_on:
      - redis # 确保应用启动前Redis已就绪

然后修改appsettings.json的连接字符串为redis:6379,重新启动所有服务:

docker-compose up -d --build

3. 让.NET应用容器使用宿主机网络(仅临时测试用,不推荐生产)

在docker-compose.yml的应用服务中添加network_mode: host,此时容器内的localhost等同于宿主机,可直接使用localhost:5005连接:

services:
  dotnet-app:
    build: .
    network_mode: host
    # 注意:此时ports映射无需配置,因为共享宿主机网络

这种方式会破坏容器的网络隔离性,仅适合临时验证问题。

验证方法

修改完成后,可在.NET应用容器内执行ping命令测试Redis连通性:

docker exec -it [app-container-name] ping mtg-redis

如果能正常ping通,再测试缓存调用即可。

内容的提问来源于stack exchange,提问作者Hurrmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:00:17