![](/img/trans.png)
[英].Net Core app in docker container can't connect to SQL Server
[英]Why can't connect my .net core container to the SQL Server docker container?
即使后端在本地运行且数据库在 docker 中,它也无法连接到 SQL Server 容器。
我使用 Azure SQL 进行了测试,一切正常。
错误:
2021-07-13 21:43:32.79 Logon Login failed for user 'sa'. Reason: Failed to open the explicitly specified database 'AsdDB'. [CLIENT: XXX.168.XX.3]
backend | fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
backend | An error occurred using the connection to database 'AsdDB' on server 'sqlserver'.
backend | fail: Microsoft.EntityFrameworkCore.Query[10100]
backend | An exception occurred while iterating over the results of a query for context type 'Asd.Db.AppDbContext'.
backend | Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot open database "AsdDB" requested by the login. The login failed.
backend | Login failed for user 'sa'.
dotnet ef update database
dotnet ef database update --project Asd.Api.csproj
Build started...
Build succeeded.
Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)
后端 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /app
EXPOSE 80
COPY *.sln .
COPY Asd.Api/*.*.csproj ./Asd.Api/
COPY Asd.Db/*.*.csproj ./Asd.Db/
RUN dotnet restore
COPY Asd.Api/. ./Asd.Api/
COPY Asd.Db/. ./Asd.Db/
WORKDIR /app/Asd.Api
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS runtime
WORKDIR /app
COPY --from=build /app/Asd.Api/out ./
ENTRYPOINT ["dotnet", "Asd.Api.dll"]
Docker 组成:
version: "3.8"
services:
backend:
container_name: backend
build:
context: ./backend/
dockerfile: Dockerfile
depends_on:
- db
ports:
- "5000:80"
db:
image: "mcr.microsoft.com/mssql/server:2017-latest"
container_name: sqlserver
hostname: sqlserver
environment:
SA_PASSWORD: "ASDFGHJ12345"
ACCEPT_EULA: "Y"
restart: unless-stopped
ports:
- "1433:1433"
appsettings.json 中的连接字符串
"ConnectionStrings": {
"DefaultConnection": "Server=sqlserver;Database=AsdDB;user id=sa;password=ASDFGHJ12345;"
},
在连接字符串中,必须向服务器传递以下值:
服务器= host.docker.internal ;数据库=AsdDB;用户ID=sa;密码=ASDFGHJ12345%;
所以现在它可以工作了,花了 2 天的时间来弄乱它,但是在我发布问题之后,我找到了答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.