sql-server - .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!
我尝试了几件事:
- 在 docker-compose 文件中添加链接(productservice 中的 sqlserver)
- 将网络添加到 docker-compose 文件
- 将连接字符串更改为“server=sqlserver;user id=sa;password=docker123!;database=ProductService;” 或“server=sqlserver,1433;user id=sa;password=docker123!;database=ProductService;”
解决方案
嘿,我遇到了类似的问题,偶然发现了您的帖子,这与我遇到的问题不同,但我想我知道您遇到的问题(抱歉,这个回复太晚了)
查看您的连接字符串server=sqlserver;port=1433;user id=sa;password=docker123!;database=ProductService;
,您实际上必须以另一种方式指定端口:server=sqlserver,1433;user id=sa;password=docker123!;database=ProductService;
希望这可以帮助!
推荐阅读
- swift - 试图从 URL 中提取元数据
- c# - 在 C# 和 Python 之间传递变量(IronPython?)
- keycloak - 具有多个值的 Keycloak AttributeToRoleMapper
- python-3.x - 如何忘记会话 Django 2.1
- javascript - HTML 中的 Javascript 值
- java - Protobuf JsonFormater.printer 在 Json 中将 long 转换为 String
- java - 使用 java 使用 AWS SES 发送重复的电子邮件
- oop - 抽象工厂:实现方式
- c++ - 继承:构造函数,像c++11中基类的数组成员一样初始化C
- html - -webkit-text-security:光盘;不能在 IE 中工作