簡體   English   中英

Docker api 未連接到 Docker 中的 SQL 服務器

[英]Docker api not connecting to SQL Server in Docker

我正在嘗試在 docker 中運行我的應用程序,同時還創建了一個 SQL 服務器。

它似乎沒有連接到我的 SQL 服務器,我收到以下錯誤:

未處理的異常。 Microsoft.Data.SqlClient.SqlException (0x80131904):建立與 SQL 服務器的連接時出現與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確以及 SQL 服務器是否配置為允許遠程連接。 (提供商:TCP 提供商,錯誤:40 - 無法打開與 SQL 服務器的連接:無法打開與 SQL 服務器的連接)

這就是我的 docker-compose 文件的樣子。

version: '3.7'

services:
  musicapi:
    build:
      context: .
    ports:
      - 80:80
    environment:
      Authentication:Enabled: 'true'
    restart: always
    depends_on:
      - testdb

  testdb:
    image: mcr.microsoft.com/mssql/server:2017-latest
    ports: 
      - "1433:1433"
    environment:
      TZ: Europe/Amsterdam
      ACCEPT_EULA: "y"
      SA_PASSWORD: Password01
    volumes:
      - mssql_data:/var/opt/mssql/data       
    restart: always

volumes:
  mssql_data:

還有我的 Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
WORKDIR /src

COPY . .

RUN dotnet restore
RUN dotnet build -c Release
RUN dotnet publish -c Release -o ./out 

FROM base AS final
WORKDIR /app
COPY --from=build /src/out .

# The following 2 lines are required for solving: 
# "Globalization Invariant Mode is not supported" error.
RUN apk add --no-cache icu-libs
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

ENTRYPOINT ["dotnet", "Test.Api.dll"]

我的連接字符串如下所示:

"ConnectionStrings": 
{
    "DefaultConnection": 
         "Server=localhost,1433;Database=test.db;User ID=sa;Password=Password01;TrustServerCertificate=True;"
}

我究竟做錯了什么?

每個容器都是一個單獨的網絡實體,因此當您的連接字符串指定Server=localhost時,這意味着數據庫與您的應用程序位於同一容器中。

在 docker-compose 創建的 Docker.network 上,容器可以使用服務名稱作為主機名相互通信。 在您的情況下,可以使用主機名testdb訪問數據庫容器。

所以你的連接字符串應該是

Server=testdb,1433;Database=test.db;User ID=sa;Password=Password01;TrustServerCertificate=True;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM