在ASP.NET Core中构建docker:"没有这样的文件或目录"错误

时间:2017-04-13 08:54:59

标签: .net docker asp.net-core .net-core dockerfile

我在构建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 .

你有什么想法吗?

3 个答案:

答案 0 :(得分:32)

发生这种情况是因为您没有发布解决方案。错误消息不言自明:

no such file or directory

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

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

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命令,它实际构建了一个&发布您的项目。

所以解决您的问题的方法,只是在调用docker之前构建项目:

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

答案 1 :(得分:3)

在Visual Studio 2017中使用“添加Docker支持”选项时,VS会生成一堆docker-compose文件和Dockerfiles。正如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. 发布您的项目
  4. 使用docker-compose up
  5. 启动项目

    我遇到过主要项目的Dockerfile出现问题的情况。 FROM microsoft/aspnetcore:1.1会发生这种情况,您可以将其更改为FROM microsoft/aspnetcore:1.1.2或项目所需的任何版本。

答案 2 :(得分:0)

如果您已发布项目并由于目录错误而面临此问题,则只需将docker文件上移一个文件夹,然后将其放在* .sln文件旁边。