【问题标题】:Build docker in ASP.NET Core: "no such file or directory" error在 ASP.NET Core 中构建 docker:“没有这样的文件或目录”错误
【发布时间】:2017-09-09 07:20:42
【问题描述】:

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

你有什么问题吗?

【问题讨论】:

  • 你试过我的解决方案了吗?

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


【解决方案1】:

如果你已经发布了你的项目并且因为目录错误而面临这个问题,只需将 docker 文件上移一个文件夹并将其放在 *.sln 文件旁边。

【讨论】:

    【解决方案2】:

    当您在 Visual Studio 2017 中使用“添加 Docker 支持”选项时,VS 会生成一堆 docker-compose 文件和 Dockerfile。正如 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 或您的项目所需的任何版本。

    【讨论】:

    • VS.net 2017 17.4 不会创建 docker-compose.ci.build.yml 也不会从它生成的命令行调用此文件。任何人都知道它现在是如何工作的,因为它仍然坏了。
    • 据我所知,这个命令可以正常工作(从VS2017的输出窗口复制)docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -p dockercompose17560113652152234329 --no-ansi build
    【解决方案3】:

    发生这种情况是因为您没有发布解决方案。错误消息一目了然:

    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 .
    

    【讨论】:

    • 我也有同样的问题。我应该在哪里添加这两行?在我的项目的 Dockerfile 中?
    • @GSPdibbler 这些是命令行命令,因此您可以在同一位置运行 docker CLI。可能是一个 bat 文件。
    猜你喜欢
    • 2020-04-05
    • 2021-10-08
    • 2017-12-15
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多