我在一個解決方案中有四個專案:
App.Data- 類別庫App.Core- 類別庫App.LambdaOne- AWS Lambda 專案App.LambdaTwo- AWS Lambda 專案
解決方案結構如下所示:
解決方案:
- 應用程式資料
- 應用核心
- 應用程式.LambdaOne
- Dockerfile
- 應用程式.LambdaTwo
- Dockerfile
我正在嘗試為App.LambdaOneand創建兩個 docker 映像App.LambdaTwo,因此我可以單獨部署它們。
到目前為止,我已經使用下面的 Dockfile 獲得了一個沒有任何依賴專案的簡單 lambda 專案。
App.LambdaSimple目錄中的 Docker 命令
docker build -t LambdaSimpleImage .
Dockerfile
FROM public.ecr.aws/lambda/dotnet:6 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim as build
WORKDIR /src
COPY ["App.LambdaSimple.csproj", "App.LambdaSimple/"]
RUN dotnet restore "App.LambdaSimple.csproj"
WORKDIR "/src/App.LambdaSimple"
COPY . .
RUN dotnet build "App.LambdaSimple.csproj" --configuration Release --output /app/build
FROM build AS publish
RUN dotnet publish "App.AWSLambdaOne.csproj" \
--configuration Release \
--runtime linux-x64 \
--self-contained false \
--output /app/publish \
-p:PublishReadyToRun=true
FROM base AS final
WORKDIR /var/task
COPY --from=publish /app/publish .
CMD ["App.LambdaSimple::App.LambdaSimple.Function::FunctionHandler"]
但棘手的部分是App.LambdaOne取決于App.DataandApp.Core。我嘗試將作業示例修改為 deploy App.LambdaOne,但到目前為止還沒有運氣。通過運行相同的 Docker 命令。發生錯誤,我已將其添加到評論中
FROM public.ecr.aws/lambda/dotnet:6 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim as build
WORKDIR /src
COPY ["App.AWSLambdaOne.csproj", "App.AWSLambdaOne/"]
#Error: cannot find App.Data.csproj
COPY ["App.Data.csproj", "App.Data/"]
RUN dotnet restore "App.LambdaOne.csproj"
WORKDIR "/src/App.AWSLambdaOne"
COPY . .
RUN dotnet build "App.AWSLambdaOne.csproj" --configuration Release --output /app/build
FROM build AS publish
RUN dotnet publish "App.AWSLambdaOne.csproj" \
--configuration Release \
--runtime linux-x64 \
--self-contained false \
--output /app/publish \
-p:PublishReadyToRun=true
FROM base AS final
WORKDIR /var/task
COPY --from=publish /app/publish .
CMD ["App.AWSLambdaOne::App.AWSLambdaOne.Function::FunctionHandler"]
我可以理解為什么會發生錯誤,這是由于 Docker 背景關系位于 App.AWSLambdaOne 下。但找不到任何解決方案來解決它。
我發現的一個部分解決方案是將 Dockerfile 放在解決方案級別,因此 Docker 背景關系在構建它時包括所有專案。但是,它不符合我的目的,因為我想為不同的專案構建兩個影像。
這兩天我一直在尋找線索,這讓我發瘋。請問現有的專案結構是否可以實作我所追求的目標?如果沒有,任何人都可以指出我正確的方向嗎?
提前非常感謝!
uj5u.com熱心網友回復:
您無法訪問構建背景關系之外的主機檔案,因此您必須將構建背景關系移動到一個目錄才能訪問其他專案的代碼。因此,首先,讓我們將構建命令更改為
docker build -t LambdaSimpleImage ..
現在我們需要調整 Dockerfile 使其適合新的背景關系
FROM public.ecr.aws/lambda/dotnet:6 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim as build
WORKDIR /src
COPY ["App.LambdaSimple/App.LambdaSimple.csproj", "App.LambdaSimple/"]
COPY ["App.Data/App.Data.csproj", "App.Data/"]
COPY ["App.Core/App.Core.csproj", "App.Core/"]
RUN dotnet restore "App.LambdaSimple/App.LambdaSimple.csproj"
COPY . .
RUN dotnet build "App.LambdaSimple/App.LambdaSimple.csproj" --configuration Release --output /app/build
FROM build AS publish
RUN dotnet publish "App.LambdaSimple/App.LambdaSimple.csproj" \
--configuration Release \
--runtime linux-x64 \
--self-contained false \
--output /app/publish \
-p:PublishReadyToRun=true
FROM base AS final
WORKDIR /var/task
COPY --from=publish /app/publish .
CMD ["App.LambdaSimple::App.LambdaSimple.Function::FunctionHandler"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481080.html
標籤:C# 码头工人 .net-core aws-lambda
