【问题标题】:Couldn't connect to MS SQL Server docker container from another docker container无法从另一个 docker 容器连接到 MS SQL Server docker 容器
【发布时间】: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 mssqlServer=mysql; 似乎不会一起工作。
  • 此外,Docker 的默认桥接网络没有可用的容器级 DNS 解析,因此使用 docker run 生成的容器将无法通过名称看到彼此。这在使用 Docker Compose 时会为您处理好,因为它会为每个组合创建一个新网络。
  • host.docker.internal 而不是服务器名/ip

标签: sql-server docker asp.net-core-webapi


【解决方案1】:

如果您需要 DNS 解析,请不要在默认桥接网络上运行您的工作负载。默认桥接网络上的容器只能通过 IP 地址相互访问,除非您使用 --link 选项,该选项被视为旧版。在用户定义的桥接网络上,容器可以通过名称或别名相互解析。

【讨论】:

    猜你喜欢
    • 2020-01-30
    • 2019-03-26
    • 2019-05-29
    • 2016-12-26
    • 2019-09-04
    • 2016-01-29
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多