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

.NET Core容器化后无法连接MySQL主机问题求助

解决Docker中.NET Core应用无法连接MySQL的问题

这个问题我之前也碰到过,核心原因是容器内的应用用127.0.0.1指向的是容器自身,而非docker-compose中定义的MySQL服务。下面是分步解决方案:

1. 修正数据库连接字符串

把你的连接字符串里的server=127.0.0.1替换成server=db——因为docker-compose会为每个服务创建DNS别名,服务名db就是MySQL容器在内部网络中的地址。另外注意你的连接字符串里数据库名是test,但docker-compose中配置的是onlinesmlogs,建议统一成一致的名称:

"server=db;port=3306;Database=onlinesmlogs;Uid=root;Pwd="

2. 确保MySQL服务初始化完成后再启动应用

MySQL容器启动后需要一点时间完成初始化,直接启动.NET Core应用可能会因为数据库还没准备好而报错。可以给db服务添加健康检查,让应用等待MySQL就绪后再启动:
修改你的docker-compose.yml,给db服务加上healthcheck配置,同时让onlinesm.logs服务依赖于db的健康状态:

version: '3.0'
services:
  db:
    image: mysql:latest
    command: --lower_case_table_names=1
    environment:
      MYSQL_DATABASE: onlinesmlogs
      MYSQL_USER: root
      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
    volumes:
      - dbdata:/var/lib/mysql
      - _MySQL_Init_Script:/docker-entrypoint-initdb.d
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10
  onlinesm.logs:
    image: onlinesm
    build:
      context: .
    ports:
      - "8080:80"
    depends_on:
      db:
        condition: service_healthy
volumes:
  dbdata: {}
  _MySQL_Init_Script : {}

3. 额外检查点

  • 确认你的.NET Core项目中安装了正确的MySQL EF Core驱动(比如MySql.EntityFrameworkCore),版本尽量和MySQL容器的版本兼容;
  • 检查MYSQL_ALLOW_EMPTY_PASSWORD: "true"的配置是否生效,避免因为密码验证失败导致连接拒绝;
  • 不需要给db服务映射宿主机端口(除非你需要从宿主机直接连接MySQL),容器内部通过服务名和3306端口就能正常访问。

按照以上步骤调整后,重新启动docker-compose,应用应该就能正常连接MySQL了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:01:08