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
)。
我有一个基于 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
)。