如何在包含多个库的Docker中构建和运行.NET Core Console应用程序?

时间:2018-11-23 02:51:12

标签: .net docker .net-core dockerfile

我正在努力寻找一个很好的例子,希望能对此有所帮助。

我的项目/文件结构如下:

\src
\src\BulkImporter
    \src\BulkImporter\BulkImporter.csproj
\src\lib1
    \src\lib1\lib1.csproj
\src\lib2
    \src\lib2\lib2.csproj

因此,我正在尝试将BulkImporter进行码头化。要构建该应用,它需要lib1lib2

我正在尝试进行多阶段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外部运行良好)。

有人可以发现问题吗?

0 个答案:

没有答案