我已经在Docker上部署了我的ASP.NET Core Web API.我的应用程序也在Docker容器中与SQL Server交互.
这是我的docker-compose.yml
%文件:
version: '3'
services:
db:
image: mcr.microsoft.com/mssql/server
container_name: db
ports:
- 1533:1433
environment:
- TZ=Asia/Tehran
- ACCEPT_EULA=Y
- MSSQL_SA_PASSWORD=******
user: root
volumes:
- ./mssql:/var/opt/mssql/data
kava-service:
image: service:1.0.0
container_name: service
expose:
- 9001
ports:
- 9001:9001
depends_on:
- db
environment:
- ASPNETCORE__ENVIRONMENT=Production
- TZ=Asia/Tehran
- AUTO__MIGRATE=true
- ConnectionStrings__BusinessDomainConnectionString=Server=db;Initial Catalog=Kava.BusinessDomain;User ID=sa;pwd=****;MultipleActiveResultSets=true;
- ConnectionStrings__RecordsConnectionString=Server=db;Initial Catalog=Kava.Records;User Id=sa;pwd=****;MultipleActiveResultSets=true;
当我运行Docker容器(使用docker-compose
)时,它工作得很好.但是如果我重新启动这个容器,它不工作,应用程序退出并显示以下消息:
Login failed for user 'sa'. Reason: Failed to open the explicitly specified database 'Kava.BusinessDomain' [CLIENT: 172.18.0.4] kava-service
Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): Database 'Kava.BusinessDomain' already exists. Choose a different database name.
当我删除这个数据库一切工作,但我不想删除它.
在开发阶段(我指的是Visual Studio)一切都很好,但在生产阶段(Docker),迁移并不能像预期的那样工作.
以下是我的迁移命令:
BusinessDomainContext businessDomainContext = serviceScope.ServiceProvider.GetRequiredService<IBusinessDomainDatabaseFactory>().Get() as BusinessDomainContext;
await businessDomainContext.Database.MigrateAsync();