Docker 好像是 运行 卷错了

Docker seems to be running with the wrong volume

我有一个基于 ASP.NET Core 3.1 框架编写的 Web 项目。我想 运行 在 Linux 虚拟框上的 docker 容器中的项目。

我创建以下 docker-compose.yml 文件

version: '3.4'

services:
  myproject:
    image: ${DOCKER_REGISTRY-}myproject
    build:
      context: .
      dockerfile: myproject/Dockerfile
    volumes:
      - storage:/storage
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - 51736:80
      - 44344:443
volumes:
  storage:

当我执行docker-compose up --build

我得到以下输出

Successfully built b084cb989f05
Successfully tagged myproject:latest
Starting myproject_myproject_1 ... done
Attaching to myproject_myproject_1
myproject_1  | Unhandled exception. System.IO.DirectoryNotFoundException: /app/Storage/
myproject_1  |    at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
myproject_1  |    at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root)

从上面的日志中,应用正在寻找 /app/Storage/ 路径来初始化 PhysicalFileProvider。我不确定那是从哪里来的。根据我的 docker-compose.yml 文件,存储容量应该 /storage 而不是 /app/Storage/.

在某些时候,我的 docker-compose.yml 文件中有 storage:/app/Storage,但它不再存在了。是什么导致图像附加了错误的 volume/storage 文件夹?

已更新

这是Dockerfile

的内容
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["myproject/myproject.csproj", "myproject/"]
RUN dotnet restore "myproject/myproject.csproj"
COPY . .
WORKDIR "/src/myproject"
RUN dotnet build "myproject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myproject.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myproject.dll"]

我尝试了以下命令来删除所有内容

docker-compose down -v --rmi all --remove-orphans
docker-compose build --no-cache

但是,我仍然得到相同的结果。如何正确挂载图像的 /storage 文件夹?

我认为该消息与 docker-compose 无关。

应用程序中的某些内容告诉它查看该文件夹。文件夹不存在是正确的,因为 docker-compose 没有创建它。

检查提供此路径的 ASP.NET 应用程序本身中的代码或配置。或者运行dotnet进程的docker命令als,或者docker文件中设置的环境变量。

更新:

查看您的 docker 文件,我猜该应用正在寻找 storage 而不是 /storage (相对路径而非绝对路径),这就是您得到的原因开头的额外 /app(来自 workdir)。