【发布时间】:2021-03-04 16:36:13
【问题描述】:
我对 docker 比较陌生,我正在尝试使用 MySQL 服务器和数据库为我的 C# 项目创建一个开发环境。
我已经有我的 C# 控制台项目 Dockerfile 和一个 docker-compose 文件,它为我的项目提供服务和为 MySQL 服务器提供服务。问题是,在我的 C# 控制台项目中,我无法使用服务名称或 container_name(如果已设置)从该容器访问 MySQL 服务器。
有我的docker-compose.yml 文件:
version: '3.5'
services:
databasetester:
image: ${DOCKER_REGISTRY-}databasetester
build:
context: .
dockerfile: src/DatabaseTester/Dockerfile
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: testdb
MYSQL_USER: testusr
MYSQL_PASSWORD: testpwd
MYSQL_ROOT_PASSWORD: testroot
ports:
- "3307:3306"
expose:
- 3307
volumes:
- ./bin/_database:/var/lib/mysql
另外,在我的项目中,我使用 EntityFrameworkCore 来访问数据库:
public class DatabaseContext : DbContext
{
public DbSet<CharacterEntity> Characters { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("Server=db;Uid=testusr;Pwd=testpwd;Database=testdb;Port=3307");
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
public class CharacterEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
当我启动项目时,它在尝试连接到 mysql 服务器时抛出错误:
引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。 无法连接到任何指定的 MySQL 主机。
我尝试遵循许多教程和指南,他们都使用服务名称在 mysql 连接字符串中有一个“服务器”,但在我的情况下它似乎不起作用。
您有什么想法可以解决这个问题吗?
【问题讨论】:
-
尝试将您的连接更改为
optionsBuilder.UseMySql("Server=db;Uid=testusr;Pwd=testpwd;Database=testdb;Port=3306")
标签: c# mysql docker docker-compose entity-framework-core