首页 > 解决方案 > .NET Core API 无法通过 docker-compose 连接到数据库

问题描述

我正在开发一个带有 MSSQL Server 数据库的 .NET 核心 Web API。我试图将它容器化到一个 Docker 容器中,并使用 Docker Compose 来启动这个服务。但我的 API 无法连接到数据库。

出现以下错误:

应用程序启动异常:System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:40 - 无法打开与 SQL Server 的连接)

我启动时的代码:

services.AddDbContext<ProductServiceDbContext>(options =>
     options.UseSqlServer("server=sqlserver;port=1433;user id=sa;password=docker123!;database=ProductService;"));

Dockerfile:

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore dockerapi.csproj

COPY . ./
RUN dotnet publish dockerapi.csproj -c Release -o out

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime

WORKDIR /app

COPY --from=build /app/out .

ENTRYPOINT ["dotnet", "dockerapi.dll"]`

码头工人组成:

version: '3.4'

services:
   productservice:
     image: productservice/api
     container_name: productservice_api
     build:
       context: ./ProductService/ProductService
     depends_on:
       - sqlserver
     ports:
       - "5000:80"

   sqlserver:
     image: microsoft/mssql-server-linux:latest
     container_name: sqlserver
     ports:
       - "1433"
     environment:
       - ACCEPT_EULA=Y 
       - SA_PASSWORD=docker123!

我尝试了几件事:

标签: sql-serverdocker.net-coredocker-composecontainers

解决方案


嘿,我遇到了类似的问题,偶然发现了您的帖子,这与我遇到的问题不同,但我想我知道您遇到的问题(抱歉,这个回复太晚了)

查看您的连接字符串server=sqlserver;port=1433;user id=sa;password=docker123!;database=ProductService;,您实际上必须以另一种方式指定端口:server=sqlserver,1433;user id=sa;password=docker123!;database=ProductService;

希望这可以帮助!


推荐阅读