在ASP.NET Core中构builddocker:“没有这样的文件或目录”错误

当我build立我的docker时,出现错误。

Sending build context to Docker daemon 3.584 kB Step 1/8 : FROM microsoft/aspnetcore:1.1 ---> 2628aaa7b8cf Step 2/8 : ENV ASPNETCORE_URLS "http://*:5000" ---> Using cache ---> 5dffde204fef Step 3/8 : ENV ASPNETCORE_ENVIRONMENT "Development" ---> Using cache ---> 3064358bc0eb Step 4/8 : ARG source ---> Using cache ---> 4159d0eb78c0 Step 5/8 : WORKDIR /app ---> Using cache ---> 61a394c84304 Step 6/8 : EXPOSE 5000 ---> Using cache ---> c7c2309f7085 Step 7/8 : COPY ${source:-obj/Docker/publish} . lstat obj/Docker/publish: no such file or directory 

这是我的Dockerfile。

 FROM microsoft/aspnetcore:1.1 ENV ASPNETCORE_URLS="http://*:5000" ENV ASPNETCORE_ENVIRONMENT="Development" ARG source WORKDIR /app EXPOSE 5000 COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "ProjectTestApi.dll" 

我运行一个命令:

 $ docker build -t my-docker-image-test . 

你有什么问题吗?

这是因为你没有发布你的解决scheme。 错误信息是不言自明的:

 no such file or directory 

默认情况下,当您向您的ASP.NET Core Visual Studio 2017项目添加Docker支持时,会创build一堆docker-compose.yml文件,其中一个是处理构build过程docker-compose.ci.build.yml 。 然后,当您通过Visual Studio生成项目时,将执行完整的docker-composepipe道。

docker-compose.ci.build.yml的内容与此类似(显然取决于自定义configuration和项目名称):

 version: '2' services: ci-build: image: microsoft/aspnetcore-build:1.0-1.1 volumes: - .:/src working_dir: /src command: /bin/bash -c "dotnet restore ./SolutionName.sln && dotnet publish ./SolutionName.sln -c Release -o ./obj/Docker/publish" 

正如你可以在最后一行看到的那样,调用了一个dotnet publish命令,它实际上构build并发布了你的项目。

所以你的问题解决scheme ,将只是在调用docker之前构build项目:

 dotnet publish ./SolutionName.sln -c Release -o ./obj/Docker/publish docker build -t my-docker-image-test . 

当您在Visual Studio 2017中使用“添加Docker支持”选项时,VS会生成一堆docker-compose文件和Docker文件。 正如Marcin Zablocki提到的,​​其中一个是docker-compose.ci.build.yml

为了与Docker理念保持一致,您可以使用Docker容器来发布您的项目。 要发布您的项目,您将采取以下步骤:

  1. git clone/pull你的项目&CD到根目录
  2. docker-compose -f docker-compose.ci.build.yml up发布你的项目
  3. docker-compose up开始你的项目吧

我遇到了主项目的Dockerfile出现问题的情况。 这发生在FROM microsoft/aspnetcore:1.1 ,你可以改变它FROM microsoft/aspnetcore:1.1.2或任何版本是您的项目所需要的。