Как скопировать содержимое из предыдущего каталога в Dockerfile

Рассмотрим пример кода приложения dotnet.

  • У меня есть код приложения, присутствующий на

    D:\eshop\DotneteShopOnWeb\src\Web\Application.sln

  • и у меня есть несколько проектов в Application.sln, таких как Web, API, Test

  • каждый проект имеет свой собственный Dockerfile, например

    D:\eshop\DotneteShopOnWeb\src\Web>Dockerfile

Dockerfile выглядит следующим образом:

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /app

COPY *.sln .
COPY . .
WORKDIR /app/src/Web
RUN dotnet restore

RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./

ENV ASPNETCORE_ENVIRONMENT Development

ENTRYPOINT ["dotnet", "Web.dll"]

Я выполняю команду docker build Расположение Dockerfile.

Я также пробовал docker build -t dotnetcore-eshop-mvc-manual -f src/Web/Dockerfile . от D:\eshop\DotneteShopOnWeb>

Я получаю ошибки в RUN dotnet restore, так как файл sln не копируется в рабочий каталог.

Пожалуйста, дайте мне знать, какая модификация мне нужна в COPY для копирования содержимого из предыдущего каталога.


person Eddie    schedule 29.01.2021    source источник
comment
Отвечает ли это на ваш вопрос? Docker: добавление файла из родительского каталога   -  person omajid    schedule 29.01.2021


Ответы (1)


вы меняете рабочий каталог перед восстановлением. Я имею в виду, что ваши файлы .sln находятся в пути /app, но ваше восстановление выполняется внутри /app/src/Web location. вы должны сделать что-то подобное, чтобы скопировать файлы .sln.

COPY *.sln .
COPY . .
WORKDIR /app/src/Web
COPY . .

RUN dotnet restore
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./

ENV ASPNETCORE_ENVIRONMENT Development

ENTRYPOINT ["dotnet", "Web.dll"]
person Amir    schedule 29.01.2021
comment
:- Спасибо за ответ. Предложенное вами решение не может копировать содержимое из предыдущего каталога. то, что я хочу сделать, похоже на cd ../.., и что бы там ни было, я хочу скопировать их все. - person Eddie; 29.01.2021
comment
Нет необходимости копировать из предыдущего каталога. Я думаю, что ваша проблема может быть решена многими способами! Я изменил свой ответ на другой, но это не лучшая практика - person Amir; 29.01.2021
comment
:- Я попробовал ваше решение. Это все то же самое. Я считаю, что папку .sln, которая присутствует в предыдущем каталоге, необходимо скопировать, иначе dotnet restore выдаст сообщение об ошибке > [build 5/6] RUN dotnet restore: #10 1.470 MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file. - person Eddie; 01.02.2021
comment
Если у вас есть Whatsapp или Google Hangout, напишите мне свою учетную запись по адресу [email protected]. Я помогу вам решить вашу проблему. - person Amir; 01.02.2021