.NET Core API无法通过docker-compose

时间:2019-02-16 11:15:20

标签: sql-server docker .net-core docker-compose containers

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

发生以下错误:

  

应用程序启动异常:System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:TCP Provider,错误: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-compose:

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;用户ID = sa;密码= docker123 !;数据库= ProductService;”

3 个答案:

答案 0 :(得分:2)

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

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

希望这会有所帮助!

答案 1 :(得分:0)

  1. 尝试另一个端口,因为它可能与现有端口发生冲突。例如“ 1433:1401”;
  2. 暂时禁用防病毒软件,然后查看其是否有效;
  3. 在运行容器之前,创建一个名称为“ ProductService”的目录,就像在appSettings.json中定义的一样;

我还没有测试过。尝试后果自负。

答案 2 :(得分:0)

尝试这些更改:

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