Я изо всех сил пытаюсь найти хороший пример этого, поэтому надеюсь на некоторую помощь.
Моя структура проекта / файла выглядит следующим образом:
\src
\src\BulkImporter
\src\BulkImporter\BulkImporter.csproj
\src\lib1
\src\lib1\lib1.csproj
\src\lib2
\src\lib2\lib2.csproj
Итак, я 'Я пытаюсь докеризировать BulkImporter
.Чтобы собрать приложение, ему нужно lib1
и lib2
.
Я пытаюсь сделать многоэтапную сборку докера, поэтому сборка + образ времени выполнения.
Вот мой текущийDockerfile:
FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app
# copy everything and build the project
COPY . ./
RUN dotnet restore src/BulkImporter/*.csproj
RUN dotnet publish src/BulkImporter/*.csproj -c Release -o out
# build runtime image
FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY --from=build-env /app/src/BulkImporter/out ./
ENTRYPOINT ["dotnet", "BulkImporter.dll"]
Но, похоже, это не так.Я не знаю, нужно ли мне «строить все».Кроме того, у меня есть файл csv
в моем приложении, который выдает ошибку при запуске приложения, как это выглядит в app/Data/mycsv.csv
, когда обычно он существует в /Data/mycsv.csv
.
Так что яПодумайте, есть ли какие-то проблемы с моим Dockerfile.
Может кто-нибудь указать мне хороший пример того, как это сделать, или скажите, что не так с моим Dockerfile?
Спасибо
РЕДАКТИРОВАТЬ
Я обновил свой Dockerfile, чтобы он был тесно основан на примере dotnet docker .
Он работает нормально, но все еще обращен к CSVпроблема.
Вот мой обновленный файл dockerfile:
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY src/BulkImporter/BulkImporter.csproj ./BulkImporter/
COPY src/Domain/Domain.csproj ./Domain/
COPY src/ElasticSearch.SearchService/ElasticSearch.SearchService.csproj ./ElasticSearch.SearchService/
WORKDIR /app/BulkImporter
RUN dotnet restore
# copy and publish app and libraries
WORKDIR /app/
COPY src/BulkImporter/. ./BulkImporter/
COPY src/Domain/. ./Domain/
COPY src/ElasticSearch.SearchService/. ./ElasticSearch.SearchService/
WORKDIR /app/BulkImporter
RUN dotnet publish -c Release -o out
# build final release runtime image
FROM microsoft/dotnet:2.1-runtime AS runtime
WORKDIR /app
COPY --from=build /app/BulkImporter/out ./
ENTRYPOINT ["dotnet", "BulkImporter.dll"]
Я создаю образ из папки над папкой src
, используя следующую команду:
сборка докера -t навальный импортер.-f. \ src \ BulkImporter \ Dockerfile
Ошибка, которую я получаю при запуске:
Could not find file '/app/FakeData\locations.csv'.
Тем не менее, когда я делаю dotnet publish
из папки BulkImporter
вна моем компьютере в папке bin\Release\netcoreapp2.1\publish\FakeData
находится файл locations.csv
.
Код, который загружает CSV, выглядит следующим образом:
var suburbLines = (await File.ReadAllLinesAsync("FakeData\\locations.csv")).Skip(1);
(отлично работает вне Docker).
Может кто-нибудь определить проблему?