Docker似乎运行了错误的卷

问题描述 投票:0回答:1

我有一个在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/

[有时,我的storage:/app/Storage文件中有docker-compose.yml,但不再存在。是什么原因导致图像附加了错误的卷/存储文件夹?

更新

这里是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 docker-compose dockerfile docker-volume docker-image
1个回答
0
投票

该消息与我认为的docker-compose不相关。

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

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

更新:

[查看您的dockerfile,我猜该应用程序仅在寻找storage而不是/storage(相对路径,而不是绝对路径),这就是为什么您一开始就获得多余的/app(从[ C0])。

© www.soinside.com 2019 - 2024. All rights reserved.