【发布时间】:2021-04-27 12:23:03
【问题描述】:
docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:80"
container_name: web_application
depends_on:
- medicalmgr
medicalmgr:
image: "mcr.microsoft.com/mssql/server:2019-latest"
environment:
SA_PASSWORD: Pw@mm2021
ACCEPT_EULA: Y
ports:
- "1433:1433"
container_name: mmm_mmsql_2019
dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY . .
RUN dotnet restore && \
dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MedicalManager.dll"]
Startup.cs 的
public void CofigureServices(..){
....
var server = Configuration["DBServer"] ?? "medicalmgr";
var port = Configuration["DBPort"] ?? "1433";
var user = Configuration["DBUser"] ?? "SA";
var password = Configuration["DBPassword"] ?? "Pw@mm2021";
var database = Configuration["Database"] ?? "MedicalManager";
//var connectionStr = $"Server={server},{port};Initial Catalog={database};User ID=
//{user};Password={password}";
var connectionStr =
@"Server=medicalmgr;Database=MedicalManager;User=sa;Password=Pw@mm2021;";
services.AddDbContext<MedicalManagerDBContext>(
options => options.UseSqlServer(connectionStr)
);}
错误: 应用程序启动异常:Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP 提供者,错误:40 - 无法打开与 SQL Server 的连接)
【问题讨论】:
-
Ref: Networking in Compose 默认情况下,Compose 会为您的应用程序设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问,并且可以通过与容器名称相同的主机名被它们发现。您是否尝试过在连接字符串中使用
Server=mmm_mmsql_2019;? -
容器名称不适用于服务器名称,即使它们是设计使然,除非指定,否则所有容器都在同一主机上共享相同的默认网络。无论如何,这里是源代码,github.com/biteus/mmm_development/pull/new/docker_mssql_con 公开访问。如果你能看看你是否可以连接。顺便说一句,如果 .Net 应用程序不在 docker 中但在 DB 中,那么它会连接。我需要两者都在 Docker 设置中。对你的帮助表示感谢。谢谢丹·古兹曼
-
丹·古兹曼。我解决了在容器化解决方案中运行带有 mssql db 的 asp.net core 3.2 应用程序的问题。但是,只有在容器设置中,发布用户注册时,登录才不起作用。任何建议。一些重定向问题。
标签: c# .net sql-server docker connection