【发布时间】:2019-07-10 08:57:21
【问题描述】:
我正在开发一个带有 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"]`
Docker 撰写:
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 文件中
- 将连接字符串更改为 “服务器=sqlserver;用户ID=sa;密码=docker123!;数据库=ProductService;”或 "server=sqlserver,1433;user id=sa;password=docker123!;database=ProductService;"
【问题讨论】:
-
另外,我建议不要在您的应用程序中使用
sa帐户。为您的应用程序创建具有适当权限的登录名(和用户);不要给它sysadmin访问权限。 -
您可以在您的撰写文件端口中尝试此更改:-“1433:1433”
-
不幸的是没有任何区别
标签: sql-server docker .net-core docker-compose containers