簡體   English   中英

由於相對路徑,在 Docker 容器中運行 dotnet 在 Linux 上失敗

[英]Running dotnet in a Docker container fails on Linux because of relative path

我有一個 Dockerfile 構建應用程序並將其發布到這樣的容器

FROM mcr.microsoft.com/dotnet/sdk:5.0 as builder
COPY . ./
RUN dotnet publish Project -c Release -o ./publish

FROM mcr.microsoft.com/dotnet/runtime:5.0 as runner
COPY --from=builder  /publish .
WORKDIR data
ENTRYPOINT ["dotnet", "../Project.dll"]

構建映像和運行容器在 Windows 上有效,但在 Ubuntu 服務器上無效。

project_1  | Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly '/Project.dll'. The system cannot find the file specified.
project_1  |
project_1  | File name: '/Project.dll'

I think the problem is in specifying the argument for dotnet as ../Project.dll , because the shell expands this to /Project.dll and dotnet does not understand Linux paths. 有沒有辦法來解決這個問題?

我是 Docker 的初學者,也許我遺漏了一些東西(Docker 不應該在每個平台上都一樣嗎?)

編輯:在父目錄內的容器中從 bash 運行dotnet Project.dll會產生完全相同的 output

原來是權限問題,應用程序必須在子文件夾(不是根文件夾),見https://docs.docker.com/engine/examples/dotnetcore/

FROM mcr.microsoft.com/dotnet/sdk:5.0 as builder
WORKDIR /app
COPY . ./
RUN dotnet publish Project -c Release -o ./publish

FROM mcr.microsoft.com/dotnet/runtime:5.0 as runner
WORKDIR /app
COPY --from=builder  /app/publish .
WORKDIR /app/data
CMD ../Project

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM