为什么在 dockerfile 中找不到 dotnet 命令?

use*_*279 5 shell docker .net-core dockerfile docker-build

我尝试运行位于 shell 文件中的 dotnet 命令,该命令将在 docker 构建过程中由 dockerfile 调用。

\n\n

这是 dockerfile 片段:

\n\n
FROM ubuntu:16.04\nFROM microsoft/dotnet:2.2-sdk as build-env\n\n# .net core \nRUN apt-get update -y && apt-get install -y wget apt-transport-https\nRUN wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && dpkg -i packages-microsoft-prod.deb\nRUN apt-get update -y && apt-get install -y aspnetcore-runtime-2.2=2.2.1-1\n\n# dotnet tool command\nRUN apt-get update -y && apt-get install dotnet-sdk-2.2 -y\n# for dot net tool #/sf/ask/3638423211/\nENV PATH="${PATH}:/root/.dotnet/tools"\n\n# Supervisor\nRUN apt-get update -y && apt-get install -y supervisor && mkdir -p /etc/supervisor\n\n# main script as defacult command when docker container runs\n# Run the main sh script to run script in each xxx/*/db-migrate.sh. \nCMD ["/xxx/main-migrate.sh"]\n\n# Microservice files\nADD xxx /xxx\n\n# install the xxx deploy tool\nWORKDIR /xxx\nRUN for d in /xxx/*/ ; do cd "$d"; if [ -f "./install.sh" ]; then sh ./install.sh; fi; done\n
Run Code Online (Sandbox Code Playgroud)\n\n

在里面install.sh,代码如下:

\n\n
dotnet tool install -g xxx.DEPLOY --version [$(cat version)] --add-source /xxx/\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我跑步时docker build -t xxx:v0 .,我收到一条错误消息:

\n\n
\n

./install.sh: 1: ./install.sh: \xef\xbb\xbfdotnet: 未找到

\n
\n\n

我已经添加了FROM microsoft/dotnet:2.2-sdk as build-envRUN apt-get update -y && apt-get install dotnet-sdk-2.2 -y,但是为什么 Docker 在构建过程中找不到 dotnet 命令?

\n\n

我如何调用dotnet在 docker 构建过程中

\n\n

谢谢

\n

Adi*_*iii 3

FROM ubuntu:16.04
FROM microsoft/dotnet:2.2-sdk as build-env
Run Code Online (Sandbox Code Playgroud)

上面几行将FROM ubuntu:16.04被完全忽略,因为应该只有一个基本映像,因此最后一个FROM将被视为不是FROM microsoft/dotnet:2.2-sdkubuntu 的基本映像。

那么,如果您的基础映像是FROM microsoft/dotnet:2.2-sdk as build-env那么为什么要费心运行这些复杂的脚本来安装dotnet呢?

您可以去检查 dotnet 的版本。

FROM microsoft/dotnet:2.2-sdk as build-env
RUN dotnet --version
Run Code Online (Sandbox Code Playgroud)

输出

Step 1/6 : FROM microsoft/dotnet:2.2-sdk as build-env
 ---> f13ac9d68148
Step 2/6 : RUN dotnet --version
 ---> Running in f1d34507c7f2

> 2.2.402

Removing intermediate container f1d34507c7f2
 ---> 7fde8596c331
Run Code Online (Sandbox Code Playgroud)

  • 您的回答帮助我意识到找不到“dotnet”命令的原因。我的 docker 文件中错误的“FROM”部分导致了它。然后我通过将其从“FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS build-env”更改为“FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env”来修复它。谢谢。 (2认同)