在 Docker 容器中运行 .NET 应用虽然方便,但也有一些关键点需要注意,以确保应用稳定、安全且性能良好。
.NET 运行时与 SDK 的选择
生产环境应使用最小化的运行时镜像,而不是包含 SDK 的完整镜像。例如:
使用 mcr.microsoft.com/dotnet/aspnet:8.0 而不是 sdk:8.0 SDK 镜像体积大,适合开发和构建阶段,不适合部署 多阶段构建可以在一个 Dockerfile 中同时完成编译和运行,只发布最终的精简镜像容器中的端口绑定与环境变量
.NET 应用默认监听 localhost,但在容器中需要绑定到 0.0.0.0 才能被外部访问。
设置 ASPNETCORE_URLS 环境变量为 http://0.0.0.0:80 使用 Docker run -p 映射宿主机端口,如 -p 8080:80 敏感配置(如数据库连接字符串)通过环境变量注入,避免硬编码文件系统与日志处理
容器是临时的,所有写入容器内部的文件在重启后可能丢失。
日志应输出到标准输出(stdout/stderr),便于 Docker 日志驱动收集 避免在容器内持久化重要数据,必要时使用卷(volume)或绑定挂载 配置 Serilog 或内置日志提供程序将日志写到控制台健康检查与资源限制
确保容器能被正确监控,并防止资源耗尽。
添加 HEALTHCHECK 指令检测应用是否正常响应 在 docker-compose 或 Kubernetes 中设置内存和 CPU 限制 .NET 应用在容器中运行时,建议启用 DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 以减少依赖基本上就这些。只要选对基础镜像、合理配置网络和日志、注意状态管理,.NET 应用在 Docker 中运行会很稳定。不复杂但容易忽略细节。
