我正在努力寻找一个很好的例子,希望能对此有所帮助。
我的项目/文件结构如下:
\src
\src\BulkImporter
\src\BulkImporter\BulkImporter.csproj
\src\lib1
\src\lib1\lib1.csproj
\src\lib2
\src\lib2\lib2.csproj
因此,我正在尝试将BulkImporter
进行码头化。要构建该应用,它需要lib1
和lib2
。
我正在尝试进行多阶段docker构建,因此构建为+运行时映像。
这是我当前的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 example。
它运行良好,但仍然面临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
文件夹上方的文件夹构建图像:
docker build -t bulkimporter。 -f。\ src \ BulkImporter \ Dockerfile
运行时出现的错误是:
Could not find file '/app/FakeData\locations.csv'.
但是,当我从PC上的dotnet publish
文件夹执行BulkImporter
时,bin\Release\netcoreapp2.1\publish\FakeData
文件夹中就有locations.csv
文件。
加载CSV的代码是这样的:
var suburbLines = (await File.ReadAllLinesAsync("FakeData\\locations.csv")).Skip(1);
(在Docker外部运行良好)。
有人可以发现问题吗?