【发布时间】:2022-01-04 04:47:14
【问题描述】:
我已使用以下命令提取并运行 SQL Server 2017 容器映像:
docker run --name mssql -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=123456789aBcD" -e"MSSQL_PID=Express" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-CU14-ubuntu-20.04
然后我为我的应用指定了一个新的连接字符串:
{
"ConnectionStrings": {
"DbConspectConfig": "Server=mysql;Database=Test;User Id=sa;Password=123456789aBcD"
}
}
然后我刚刚在 Dockerfile 中使用这个条件启动了我的应用程序:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["EASI.Conspect/EASI.Conspect.csproj", "EASI.Conspect/"]
RUN dotnet restore "EASI.Conspect/EASI.Conspect.csproj"
COPY . .
WORKDIR "/src/EASI.Conspect"
RUN dotnet build "EASI.Conspect.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "EASI.Conspect.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EASI.Conspect.dll"]
但我收到此错误:
Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP Provider,错误:35 - 捕获到内部异常)
我需要做什么来解决这个问题?
【问题讨论】:
-
好吧,
docker run --name mssql和Server=mysql;似乎不会一起工作。 -
此外,Docker 的默认桥接网络没有可用的容器级 DNS 解析,因此使用
docker run生成的容器将无法通过名称看到彼此。这在使用 Docker Compose 时会为您处理好,因为它会为每个组合创建一个新网络。 -
host.docker.internal 而不是服务器名/ip
标签: sql-server docker asp.net-core-webapi