[英]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.