gpt4 book ai didi

c# - Docker Asp.net 核心应用程序不会加载我的 JS、imgs

转载 作者:行者123 更新时间:2023-12-02 19:20:01 25 4
gpt4 key购买 nike

我有一个 asp.net 核心应用程序,它在发布时运行良好。我正在使用以下一系列命令将其部署到 docker 镜像,lifted whole cloth from this MSFT guide.

docker build -t myimage -f Dockerfile .
docker images
docker create myimage
docker run -it -p 5000:80 -d myimage

这是我用来组成图像的 Dockerfile,顺便说一句。
#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. app/
EXPOSE 80 443 5000 5001
ENTRYPOINT ["dotnet", "app/KittenSignalR.dll"]

我可以从浏览器连接到该站点,但只提供 View 文件本身,不加载 JS、图像等。
enter image description here

所有其他 Assets 都在 Chrome 控制台中显示此错误。
GET http://localhost:5000/lib/bootstrap/dist/css/bootstrap.css net::ERR_ABORTED 404 (Not Found)


但是,当我通过 bash 检查我的容器本身时,我可以看到所有内容,只是它没有被提供。
docker exec -i -t 46263b09f1 /bin/bash
root@46263b09f1d3:/# cd app/wwwroot/js
root@46263b09f1d3:/app/wwwroot/js# ls
Class.cs chat.js signalr site.js

有小费吗?

来自我的应用程序的 Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}

最佳答案

简短回答:您的工作目录是 / ,它必须是 /app .

当您使用 ASP.Net Core 提供静态文件时,Microsoft 是这样说的:

The app's web host must be made aware of the content root directory.

The WebHost.CreateDefaultBuilder method sets the content root to the current directory



Source ,强调我的。

查看您的 Dockerfile,您永远不会更改工作目录,因此它与您从中派生的基本镜像( aspnet:3.0 镜像)1 保持不变。

因为你的工作目录是 / ,该应用程序正在寻找 wwwroot文件夹(基本上是 /wwwroot ),它找不到。这就是您在所有 wwwroot Assets 上得到 404 的原因。

要解决此问题,只需更改 Docker 镜像的工作目录并更新入口点以使用该 WD 的相对路径。
#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. app/
EXPOSE 80 443 5000 5001
WORKDIR app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]

1 值得一提的是,您要将文件复制到,并将工作目录设置为 app .这是一个相对目录路径,我强烈建议您将其设为绝对路径( /app )。

我假设 aspnet:3.0图像的默认工作目录为 / ,但我不能确定。

让它相对意味着您的文件夹结构基于基本图像的默认工作目录。它可能是根,也可能不是。最好确定绝对(双关语)并使其成为绝对路径。
#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. /app/
EXPOSE 80 443 5000 5001
WORKDIR /app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]

关于c# - Docker Asp.net 核心应用程序不会加载我的 JS、imgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60728538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com