我有一個容器在 ASP.NET Core 中部署了一個 WEB API,試圖連接到 SQL Server 資料庫。我正在使用 Docker 桌面運行 Windows 10。
我可以從 SQL Server Management Studio 和我的 ASP.NET Core 應用程式(沒有容器)成功連接到帶有 SQL Server 的 Docker 容器。
但是當我在容器內運行 ASP.NET Core 時,出現錯誤:
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HMCRFGHIEO1Q", Request id "0HMCRFGHIEO1Q:00000002": An unhandled exception was thrown by the application.
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
...
SQL Server 的 docker-compose:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- 1433:1433
volumes:
- my-volume:/var/opt/mssql
environment:
SA_PASSWORD: "StrongPassword"
ACCEPT_EULA: "Y"
用于 WEB API 的 docker-compose:
web_api:
build:
dockerfile: WebApi/Dockerfile
ports:
- 5000:80
depends_on:
- sqlserver
用于 WEB API 的 Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["WebApi/WebApi.csproj", "WebApi/"]
RUN dotnet restore "WebApi/WebApi.csproj"
COPY . .
WORKDIR "/src/WebApi"
RUN dotnet build "WebApi.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApi.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApi.dll"]
到 SQL Server 的連接字串:
"ConnectionStrings": {
"SqlConnectionString": "Server=192.168.0.108,1433;Database=myDb;User Id=sa;Password=StrongPassword;"
}
uj5u.com熱心網友回復:
默認情況下,容器連接到網橋驅動程式。要從 ASP.NET 訪問 sqlserver,您必須在連接字串中使用 sqlserver 的容器名稱。像這樣。
"ConnectionStrings": {
"SqlConnectionString": "Server=sqlserver,1433;Database=myDb;User Id=sa;Password=StrongPassword;"
}
有關更多網路詳細資訊,您可以運行下面的 cmd 命令。
docker network inspect bridge
uj5u.com熱心網友回復:
抱歉,這是我的失敗:(
我只是忘記了該docker-compose up -d命令不會重建 Docker 映像。
我洗掉了所有映像,然后再次運行該命令。
使用上面的配置,它對我來說很好用!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/343089.html
標籤:C# asp.net sql-server 码头工人 asp.net核心
下一篇:Asp.netmvcSession[""]="xxx"未將物件參考設定為服務器上的物件實體(在本地作業的同一專案)
