【发布时间】:2019-10-03 09:06:26
【问题描述】:
我是 docker 新手,遇到一个无法处理的问题。我创建了 .net core MVC 应用程序,这个应用程序应该可以在树莓派上运行,所以我在 HypriotOS 上的树莓派上对我的应用程序进行了 docker 化,一切都很好,但是没有找到来自 wwwroot(默认静态文件夹)的一些图像(404)。在 wwwroot 文件夹中,我有一些 css、js 和图像文件,并且 css、js 和一些图像可用,但没有几个 .png 文件。我不知道为什么。
- .net核心版本为2.2
- 我厌倦了在我的 Dockerfile 中添加行 VOLUME ["/wwwroot"]
- 在 Startup.Configure() 方法中我有一行 app.UseStaticFiles();
我的 Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build app
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/out .
ENTRYPOINT ["dotnet", "TestApp.dll"]
构建和运行 Docker 镜像的命令:
docker build -t testapp .
docker run -p 8080:80 --name testapp testapp
Dockerize 正确通过,没有错误。该应用程序可从外部访问,一切正常,但某些图形未显示(404 Not Found)。
【问题讨论】:
-
包含静态文件的目录是否被复制到镜像中?
-
如何查看?
-
你可以登录到容器 bash 然后
ls...。要 bash 进入容器:docker exec -it <container name> /bin/bash -
谢谢,所以在图片中我只有几个静态文件(我没有所有的 .png 文件)。那么为什么创建的图像没有所有文件?我应该手动添加它们吗?
-
当您使用 dockerfile 创建映像时,在
COPY . ./行中,您将主机中的所有资源复制到映像中。我猜你在哪里复制目录wwwroot对吗?在那一刻,该目录必须包含您需要的所有内容。使用docker cp,您可以直接从您的主机复制到正在运行的容器,但是从初始映像中新创建的容器将不包含这些文件。如果一切都解决了,请告诉我,这样我们就可以为遇到类似问题的每个人创建一个“官方”答案:)
标签: c# asp.net docker asp.net-core raspberry-pi