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

Docker环境下ASP.NET Core连接MySQL容器丢失数据库名问题求助

问题解决步骤

1. 修正连接字符串的格式与目标地址

你的连接字符串存在两个核心问题:

  • server=0.0.0.0:13306格式错误,server字段混入端口会导致EF Core解析参数混乱,直接引发Database值丢失的问题
  • 容器内部无法通过0.0.0.0访问主机映射的MySQL端口,容器间通信必须使用Docker网络内的容器名称或内部地址

修改连接字符串为:

"ConnectionStrings": {
  "ProductDbConnection": "server=mysql-container;port=3306;User=root;Password=qwerty;Database=products;"
}

注意:mysql-container替换为你启动MySQL容器时指定的--name参数值

也可以使用URI格式彻底避免解析问题:

"ConnectionStrings": {
  "ProductDbConnection": "mysql://root:qwerty@mysql-container:3306/products"
}

2. 确保两个容器处于同一Docker网络

默认bridge网络不支持容器名解析,需创建自定义网络并将两个容器加入其中:

# 创建自定义网络
docker network create app-network

# 启动MySQL容器时加入网络(自动创建products数据库)
docker run --name mysql-container --network app-network -v mysql-data:/var/lib/mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=qwerty -e MYSQL_DATABASE=products mysql:8.0.31

# 启动ASP.NET应用容器时加入同一网络
docker run --name example-app --network app-network -p 8080:80 your-image-tag

3. 验证MySQL数据库与权限设置

  • 确认products数据库已创建:

    docker exec -it mysql-container mysql -u root -pqwerty -e "SHOW DATABASES;"
    

    若不存在,可手动执行CREATE DATABASE products;,或重启MySQL容器时添加-e MYSQL_DATABASE=products参数自动创建

  • 授权root用户允许从容器网络访问:

    docker exec -it mysql-container mysql -u root -pqwerty -e "GRANT ALL ON products.* TO 'root'@'%'; FLUSH PRIVILEGES;"
    

    或启动MySQL时添加-e MYSQL_ROOT_HOST=%参数简化配置

4. 检查EF Core配置的正确性

确保ProductDbContext的基础配置无误:

public class ProductDbContext : DbContext
{
    public ProductDbContext(DbContextOptions<ProductDbContext> options) : base(options)
    {
    }

    // 定义你的实体集合
    public DbSet<Product> Products { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:15:08