Visual Studio生成的Dockerfile为何同时使用WORKDIR /src和WORKDIR "/src/."两种写法
两个WORKDIR指令功能完全一致
Dockerfile中路径的引号仅为合法包裹符,用于兼容路径包含空格等特殊字符的场景,而路径末尾的.代表当前目录,/src/.等效于/src本身,所以两条指令最终设置的容器工作目录没有任何区别。
第二条WORKDIR是模板生成逻辑的防御性写法,主要规避两类问题:
- 不依赖前置操作的执行结果:VS生成Dockerfile是通用模板逻辑,不假设前面的RUN/COPY等指令会不会因为特殊配置(比如用户自定义的前置操作、环境变量意外修改)导致工作目录偏离预期的
/src,强制复位一次工作目录,可以保证后续dotnet build的执行上下文正确 - 兼容复杂路径场景:带引号加
.的写法可以兼容项目路径包含空格、特殊字符的情况,避免路径解析错误,保证模板的通用性。
原Dockerfile代码参考:
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build WORKDIR /src COPY ["HelloKuber.csproj", "."] RUN dotnet restore "./HelloKuber.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "HelloKuber.csproj" -c Release -o /app/build
内容的提问来源于stack exchange,提问作者user6110389
相关产品推荐
相关产品推荐

