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

如何在Docker容器化的.NET 8 ASP.NET API中连接MySQL数据库

解决Docker容器中.NET 8 API连接MySQL的"No MySQL host available"错误

核心问题与修复步骤

1. 修正数据库连接字符串的主机地址

在你的.NET API配置(如appsettings.json)中,连接字符串的主机不能用localhost或127.0.0.1,必须使用docker-compose里定义的MySQL服务名database——Docker Compose会为同一网络内的服务自动创建DNS解析,通过服务名可直接访问对应容器。

示例连接字符串:

"ConnectionStrings": {
  "DefaultConnection": "server=database;port=3306;database=db;user=user;password=secretpassword;SslMode=None"
}

添加SslMode=None可避免MySQL 5.7的SSL连接兼容性问题。

2. 修复MySQL环境变量冲突

你的配置中同时设置了MYSQL_ROOT_PASSWORD=1234和MYSQL_ALLOW_EMPTY_PASSWORD=1,这两个变量互斥,会导致MySQL初始化异常。直接删除MYSQL_ALLOW_EMPTY_PASSWORD=1这一行即可。

3. 优化容器启动依赖,确保数据库就绪

depends_on仅保证API容器在数据库容器之后启动,但不会等待数据库完成初始化。修改depends_on配置,结合健康检查让API等数据库完全就绪后再启动:

修改docker-compose.yml中api服务的配置:

api:
  container_name: API
  build: 
    context: .
    dockerfile: API/Dockerfile
  ports:
    - 5092:8080
  depends_on:
    database:
      condition: service_healthy

同时修正MySQL的健康检查命令,添加root用户和密码才能正常ping通:

healthcheck:
  test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p1234"]
  timeout: 20s
  retries: 10

4. 确认MySql.Data包版本兼容性

确保安装的MySql.Data包版本与MySQL 5.7兼容,推荐使用8.0.x系列版本(如8.0.33),过高版本可能和MySQL 5.7存在适配问题。

调整后的完整docker-compose.yml

version: '3.4'

services:
  database:
    container_name: DB
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_DATABASE=db
      - MYSQL_USER=user
      - MYSQL_PASSWORD=secretpassword
    volumes:
      - dbdata:/var/lib/mysql
      - ./MySqlScripts/init.sql:/docker-entrypoint-initdb.d/1.sql:ro
    restart: on-failure
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p1234"]
      timeout: 20s
      retries: 10
    ports:
      - 3306:3306
    command: --default-authentication-plugin=mysql_native_password

  api:
    container_name: API
    build: 
      context: .
      dockerfile: API/Dockerfile
    ports:
      - 5092:8080
    depends_on:
      database:
        condition: service_healthy

volumes:
  dbdata:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:36:12