首页 新闻 会员 周边

VS2019生成的dockerfile

0
悬赏园豆:50 [已解决问题] 解决于 2019-09-19 20:08

我现在在学docker技术,但是当我使用VS2019自动生成的docker文件创建镜像时卡在了第七步,提示是找不到文件夹。我打开虚拟机发现docker用户并没有权限进入 /mnt/sda1/var/lib/docker/tmp/文件夹,我也不知道该怎样创建缺少的文件夹。
实验环境是在win10,用的Docker Quickstart Terminal,项目就是一个asp.net core 模板项目
求大神指点一二,该怎么破这个问题,还有求解释一下docker文件里的内容。

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

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

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

微若思丢丢的主页 微若思丢丢 | 初学一级 | 园豆:156
提问于:2019-09-02 19:11
< >
分享
最佳答案
0

报错估计是因为目录些的有问题 COPY ["DDemo/DDemo.csproj", "DDemo/"] 改成 COPY ["DDemo/DDemo.csproj", "/src"]试试,或者直接复制整个目录进去再执行还原

# 创建构建阶段 base
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# 创建构建阶段 build
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
# 复制DDemo下的解决方案到此阶段的DDEmo/目录  报错是因为你这个目录并没有,你可以把这个去掉或者看./DDemo是否可以
COPY ["DDemo/DDemo.csproj", "DDemo/"]
RUN dotnet restore "DDemo/DDemo.csproj"
# 复制Dockerfile所在目录的文件到此接端的工作目录 /src ,dotnet restore 可复制后执行
COPY . .
WORKDIR "/src/DDemo"
RUN dotnet build "DDemo.csproj" -c Release -o /app

# 基于 base阶段 创建 publish 阶段,发布项目到/app
FROM build AS publish
RUN dotnet publish "DDemo.csproj" -c Release -o /app

# 基于 base阶段 创建 final 阶段
FROM base AS final
WORKDIR /app
# 从publish阶段的/app目录复制文件到当前工作目录
COPY --from=publish /app .
# 入口点 执行命令
ENTRYPOINT ["dotnet", "DDemo.dll"]

关于多阶段构建的文档:https://docs.docker.com/v17.09/engine/userguide/eng-image/multistage-build/#before-multi-stage-builds

收获园豆:50
易墨 | 菜鸟二级 |园豆:449 | 2019-09-03 17:31

我试了不行,或许可以在主机里建好缺少的文件夹,但是docker用户并没有权限,卡在这了。

微若思丢丢 | 园豆:156 (初学一级) | 2019-09-05 15:22
其他回答(3)
0

将Dockerfile移动到上一级目录

aitkon | 园豆:202 (菜鸟二级) | 2019-09-23 17:14

爱死你了

支持(0) 反对(0) 天不遮我 | 园豆:66 (初学一级) | 2019-11-12 17:04
0

将Dockerfile移动到上一级目录,这有悖vs2019添加Docker支持创建的Dockerfile初衷,不是推荐的使用方式;
请注意失败提示信息
COPY failed: stat /mnt/sda1/var/lib/docker/tmp/docker-builder932966508/DDemo/DDemo.csproj: no such file or directory
意思是Dockerfile的COPY命令使用的是相对路径,Docker构建环境找不到这个相对路径的DDemo/DDemo.csproj项目文件,
应该是将docker build命令执行目录定位到/f/C#/201909/DDemo这一级,
docker build命令使用 -f 指定Dockerfile路径,

MINGW64 /f/C#/201909/DDemo
$ docker image build -f ./DDemo/Dockerfile -t aspnetcore:latest .

这样使用,Dockerfile文件里的COPY命令
COPY ["DDemo/DDemo.csproj", "DDemo/"]
就能在docker构建环境找到"DDemo/DDemo.csproj"这个相对路径的项目文件了

codeflyto | 园豆:132 (初学一级) | 2020-07-23 14:39
0

还有一种写法,我创建的是net5的项目。dockerfile文件内容如下:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY WebApplication1.csproj .
RUN dotnet restore "WebApplication1.csproj"
COPY . .
WORKDIR /src
RUN dotnet build "WebApplication1.csproj" -c Release -o /app

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

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

沐雪架构师 | 园豆:67 (初学一级) | 2021-11-11 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册