我正在使用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!
我尝试了几件事:
答案 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)
我还没有测试过。尝试后果自负。
答案 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!