.NET 8 Clean架构应用容器化:Docker Compose配置SQL Server连接问题
.NET 8 Clean架构容器化 + SQL Server 正确配置方案
一、完整Docker Compose配置
以下是包含.NET 8应用和SQL Server服务的docker-compose.yml配置,可解决网络连通、SQL Server初始化及连接握手问题:
version: '3.8' services: webapp: build: context: . dockerfile: YourWebProject/Dockerfile # 替换为你实际的Web项目Dockerfile路径 container_name: clean-arch-webapp ports: - "5000:8080" - "5001:8081" environment: - ASPNETCORE_ENVIRONMENT=Development - ConnectionStrings__DefaultConnection=Server=sqlserver;Database=CleanArchDB;User Id=sa;Password=YourStrong!Passw0rd;Encrypt=false;TrustServerCertificate=true; depends_on: - sqlserver networks: - clean-arch-network sqlserver: image: mcr.microsoft.com/mssql/server:2022-latest container_name: clean-arch-sqlserver ports: - "1433:1433" environment: - ACCEPT_EULA=Y - SA_PASSWORD=YourStrong!Passw0rd # 必须符合复杂度要求:至少8位,含大小写、数字、特殊字符 volumes: - sqlserver-data:/var/opt/mssql # 持久化数据,避免容器重启丢失数据 networks: - clean-arch-network volumes: sqlserver-data: networks: clean-arch-network: driver: bridge
二、正确的DefaultConnection连接字符串
容器内应用使用的连接字符串
可直接配置在Compose环境变量或appsettings.json中:
Server=sqlserver;Database=CleanArchDB;User Id=sa;Password=YourStrong!Passw0rd;Encrypt=false;TrustServerCertificate=true;
本地调试连接容器内SQL Server的字符串(可选)
如果需要在本地Visual Studio连接容器中的SQL Server,使用:
Server=localhost,1433;Database=CleanArchDB;User Id=sa;Password=YourStrong!Passw0rd;Encrypt=false;TrustServerCertificate=true;
三、关键注意事项
- 密码复杂度:SQL Server的SA密码必须满足复杂度要求,否则容器会启动失败,可通过Docker Desktop日志排查。
- 网络连通:确保应用与SQL Server服务在同一个自定义网络下,应用可通过服务名
sqlserver访问数据库,而非localhost。 - 启动就绪性:
depends_on仅保证SQL Server容器先启动,不保证数据库服务完全就绪。可在.NET应用中添加连接重试逻辑:
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"), sqlOptions => sqlOptions.EnableRetryOnFailure()));
- 加密配置:
Encrypt=false+TrustServerCertificate=true仅用于开发环境绕过SSL验证,生产环境需配置合法证书并启用加密。 - 路径正确性:确认Compose中指定的Dockerfile路径与你的Web项目位置匹配。
内容的提问来源于stack exchange,提问作者Manuel Raso
相关产品推荐
相关产品推荐

