今天在ubuntu系統中使用docker部署asp.net core時遇到了一個問題,docker build 的時候總會在最后一步提示
lstat obj/Docker/publish: no such file or directory。
並且執行docker images查看鏡像的時候發現生成的鏡像的REPOSITORY和TAG都是<none>。
當執行docker run的時候提示
Unable to find image 'crm:latest' locally
聯想到build的時候最后一步提示的obj/Docker/publish就猜想應該是這塊出現的問題。查看DockerFile,內容如下
FROM microsoft/aspnetcore:2.0 ARG source WORKDIR /app EXPOSE 80 COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "crm.dll"]
因為這個文件時vs2017自動生成的,所以平時也沒注意,這里邊有個COPY,里邊的內容跟報錯的一樣,查了之后才知道當從Dockerfile 中 build Docker 鏡像時候,可以選擇兩種指令來添加本地的目錄或者文件到你的鏡像中:ADD和COPY。這兩種指令格式基本相同並且基本是同樣的東西
ADD <src>... <dest>
COPY <src>... <dest>
在這兩種情況中,目錄或者文件(<src>)被復制並添加到容器的文件系統中的指定路徑(<dest>)
COPY不支持URL,也不會特別對待壓縮文件。如果build 上下文件中沒有指定解壓的話,那么就不會自動解壓,只會復制壓縮文件到容器中。
因為我build的時候就是在包含Dockerfile文件的目錄中,只需要將文件中-obj/Docker/publish修改為-/即可
