Подтвердить что ты не робот

Построить докер в ASP.NET Core: ошибка "нет такого файла или каталога"

Я получаю сообщение об ошибке при создании докеры.

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 .

Есть ли у вас какой-то идеал, что не так?

4b9b3361

Ответ 1

Это происходит потому, что вы не опубликовали свое решение. Сообщение об ошибке не требует пояснений:

no such file or directory

По умолчанию при добавлении поддержки Docker к проекту ASP.NET Core Visual Studio 2017 создается куча файлов 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 .

Ответ 2

Когда вы используете опцию "Добавить поддержку докеров" в Visual Studio 2017, VS генерирует кучу файлов для создания докеров и Dockerfiles. Как отметил Марцин Заблоки, один из них docker-compose.ci.build.yml.

Чтобы оставаться в курсе философии Docker, вы можете использовать контейнер докеров для публикации своего проекта. Чтобы опубликовать свой проект, вы должны предпринять следующие шаги:

  • git clone/pull ваш проект и cd в корневой каталог
  • Опубликуйте свой проект с помощью docker-compose -f docker-compose.ci.build.yml up
  • Начните свой проект с docker-compose up

Я столкнулся с ситуациями, когда Dockerfile вашего основного проекта создает проблемы. Это происходит с FROM microsoft/aspnetcore:1.1, вы можете изменить его на FROM microsoft/aspnetcore:1.1.2 или любую версию, необходимую для вашего проекта.