【发布时间】:2020-04-30 17:13:09
【问题描述】:
我有一个基于 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,但它不再存在。什么可能导致图像附加错误的卷/存储文件夹?
更新
这里是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 文件夹?
【问题讨论】:
-
你的
Dockerfile指的是/app/Storage吗? -
storage:/storage绝对路径 -
@DuDoff 什么是过时的路径?我现在将通过 Dockerfile 的联系人更新我的问题
-
你真的做了
COPY . .你需要做的是进入文件夹,如果在终端上输入pwd。如果你是 GUI,那么right click->properties->path并将该路径转换为 Users/<my-user-name/Desktop/thisfolder/thisfile.txt之类的东西,然后将文件夹复制到我的 Dockerfile 中,我会这样做COPY Users/<my-user-name>/Desktop/thisfolder /thisfolder -
/app/publish可能在你的Users/John/Documents/something/app/publish中获取完整路径并放入!
标签: docker docker-compose dockerfile docker-volume docker-image