Docker从一个容器复制到另一个容器

时间:2018-01-16 15:09:06

标签: asp.net node.js docker docker-compose dockerfile

我有这个泊坞文件:

FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
COPY *.sln ./
COPY MyApp.Api/MyApp.Api.csproj MyApp.Api/
RUN dotnet restore
COPY . .
WORKDIR /src/MyApp.Api
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
copy --from=build["C:\Program Files\nodejs", "C:\nodejs"]
RUN SETX PATH "%PATH%;C:\nodejs"
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyApp.Api.dll"]

我想将nodejs从 c:\ Program Files \ nodejs on build 复制到 C:\ nodejs on final 。 但是当我构建它时,我得到了这个错误:

  

步骤15/19:copy --from = publish [“C:\ Program Files \ nodejs”,   “C:\的NodeJS”]

     

错误:服务'myapp.api'无法构建:   无法处理“[\”C:\ Program“:意外结束语句时   寻找匹配的双引号

如何将nodejs从构建图像复制到我的最终图像? 感谢

1 个答案:

答案 0 :(得分:4)

如果copy --from=publish ["C:\\Program Files\\nodejs", "C:\\nodejs"]给出:

ERROR: Service 'myapp.api' failed to build: COPY failed: 
 CreateFile \\?\Volume{acdcd1b2-fe0d-11e7-8a8f-10f00533bf2a}\C:Program Filesnodejs:

尝试双重逃避:

copy --from=publish ["C:\\\\Program Files\\\\nodejs", "C:\\\\nodejs"]

或者将in this Dockerfile视为替代语法:

copy --from=publish C:\Program Files\nodejs C:\nodejs

但是,aforementioned dockerfile确实使用了两种语法而没有任何问题。例如:

COPY --from=SetupPhase ["C:\\Program Files (x86)\\Microsoft SDKs", "C:\\Program Files (x86)\\Microsoft SDKs"]

但是:它确实在copy --from

之前
RUN icacls 'C:\\Program Files (x86)\\WindowsPowerShell\\Modules' /reset /t /c /q 
RUN attrib -h -r -s 'C:\\Program Files (x86)\\WindowsPowerShell\\Modules' /s
RUN attrib -h -r -s "C:/Windows" /s

(将那些路径替换为您想要访问的路径)

这可以解释为什么它可以从另一个Windows映像复制:没有访问问题,因为ACL被重置。

OP Luka确认:

  
      
  1. 添加这些行以构建

    RUN icacls "C:\\Program Files\\nodejs" /reset /t /c /q 
      RUN attrib -h -r -s "C:\\Program Files\\nodejs" /d /s
    
  2.   
  3. 在最后编辑副本行:

    COPY --from=build ["C:\\\\Program Files\\\\nodejs", "/nodejs"]
    
  4.