Докер ядра .net работает через VS2019, но сборка образа вызывает ошибку и не работает - PullRequest
0 голосов
/ 02 апреля 2019
  "Docker": {
  "commandName": "Docker",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/api/values",
  "httpPort": 52706,
  "useSSL": true,
  "sslPort": 44344
}

Это дает вывод при запуске через visual studio

Но при сборке выдает ошибку

DockerFile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 83
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["testdocker/testdocker.csproj", "testdocker/"]
RUN dotnet restore "testdocker/testdocker.csproj"
COPY . .
WORKDIR "/src/testdocker"
RUN dotnet build "testdocker.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "testdocker.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_URLS http://+:83
ENTRYPOINT ["dotnet", "testdocker.dll"]

для создания образа докера

docker build -t testdock .

но это дает

COPY failed: stat /var/lib/docker/tmp/docker-builder666564019/testdocker/testdocker.csproj,: no such file or directory

Помогите переписать dockerfile, чтобы завершить сборку и запустить приложение

1 Ответ

0 голосов
/ 02 апреля 2019

Если вы посмотрите на вывод Контейнерных инструментов в Visual Studio, вы увидите строку вроде:

docker build -f "C:\Users\foo\source\MySolution\TestDocker\Dockerfile" -t testdocker:dev --target base  --label "com.microsoft.created-by=visual-studio" "C:\Users\foo\source\MySolution"

При создании образа для контейнера Linux в Windows Docker переносит содержимое активного каталога в виртуальную машину MobyLinux, и все команды копирования и тому подобное запускаются по этому пути в виртуальной машине MobyLinux, а не в локальной файловой системе. Поскольку проектам очень часто требуется доступ к другим проектам в том же решении для сборки, файлы Docker, созданные Visual Studio, относятся к вашему каталогу решений, так что весь каталог решений поднимается в MobyLinux.

Очень вероятно, что вы сделали, перейдя непосредственно в каталог вашего проекта и запустив оттуда файл Docker, не передавая каталог для использования в качестве «корня». Таким образом, Docker просто поднимает текущий, т. Е. Ваш проект, каталог и результирующие пути в виртуальной машине MobyLinux больше не соответствуют тому, что находится в Dockerfile.

Длинно и коротко, если вы хотите сделать сборку образа вручную, вам нужно убедиться, что активный каталог, который вы подняли, является вашим каталогом решений, а не каталогом проекта. Вы можете достичь этого, просто передав эту последнюю строку команды выше своей собственной команде, которая сделает ее относительно вашего решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...