繁体   English   中英

为什么无法将我的 .net core 容器连接到 SQL Server docker 容器?

[英]Why can't connect my .net core container to the SQL Server docker container?

即使后端在本地运行且数据库在 docker 中,它也无法连接到 SQL Server 容器。

我使用 Azure SQL 进行了测试,一切正常。

错误:

  1. 在 docker-compose up 之后,尝试将元素添加到列表中:
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'.
  1. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM