我决定使用ASP.NET Core编写一个简单的应用程序;EFCore;码头工人;sql服务器。我使用了 docker 数据库映像并将其用于 docker 组合文件,还编写了自己的 docker 映像来构建 ASP.NET Core 应用程序。当我开始运行该项目时docker-compose up --build
,一切都开始顺利,但是 ASP.NET Core 应用程序抛出错误,因为它无法连接到数据库,因为它没有找到这样的服务器。我显然不知道服务器名称,并尝试了我在互联网上找到的服务器名称。有db、localhost和localhost,1433。但他仍然找不到服务器。请帮帮我。
项目结构:
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS sdk
WORKDIR /src
COPY MyWebApp.sln .
COPY MyWebApp.Web/MyWebApp.Web.csproj ./MyWebApp.Web/
COPY MyWebApp.DAL/MyWebApp.DAL.csproj ./MyWebApp.DAL/
RUN dotnet restore
COPY MyWebApp.Web/. ./MyWebApp.Web/
COPY MyWebApp.DAL/. ./MyWebApp.DAL/
WORKDIR /src/MyWebApp.Web
RUN dotnet publish -c Release -o ./app --no-restore
WORKDIR /src/MyWebApp.DAL
RUN dotnet publish -c Release -o ./app --no-restore
FROM sdk as publish
WORKDIR /src
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
EXPOSE 8080
ENV ASPNETCORE_HTTP_PORTS=8080
COPY --from=publish /src/MyWebApp.Web/app ./
COPY --from=publish /src/MyWebApp.DAL/app ./
ENTRYPOINT [ "dotnet", "MyWebApp.Web.dll" ]
Program.cs
从项目API连接:
builder.Services.AddDbContext<AppDbContext>(opt =>
{
Thread.Sleep(15000);
opt.UseSqlServer("Server=localhost; Database=MyDatabase; User Id=sa; Password=saroot1234A$; TrustServerCertificate=true");
});
错误本身:
未处理的异常。Microsoft.Data.SqlClient.SqlException (0x80131904): 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。
如果您需要详细信息,请写入和/或存储库
总的来说,我对这个问题知之甚少,但我听一些人说我应该在 docker compose 中添加一个“带有桥接驱动程序的网络”文件。然后我的应用程序和数据库将通过桥连接。另外,如果我使用网桥,那么在连接字符串中我应该使用我在 docker-composite 中声明为数据库服务的服务器名称。
结果,dockerfile:
连接字符串将连接到服务器,但不是本地主机,而是我们在 docker 组合中创建的服务的名称。也就是说,不会是
"Server=localhost; Database=MyDatabase; User Id=sa; Password=saroot1234A$; TrustServerCertificate=true"
将
"Server=sqlserver; Database=MyDatabase; User Id=sa; Password=saroot1234A$; TrustServerCertificate=true"