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
相关产品推荐
相关产品推荐

