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

时间:2019-09-15 21:45:23

标签: shell docker .net-core dockerfile docker-build

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

这是dockerfile片段:

FROM ubuntu:16.04
FROM microsoft/dotnet:2.2-sdk as build-env

# .net core 
RUN apt-get update -y && apt-get install -y wget apt-transport-https
RUN 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
RUN apt-get update -y && apt-get install -y aspnetcore-runtime-2.2=2.2.1-1

# dotnet tool command
RUN apt-get update -y && apt-get install dotnet-sdk-2.2 -y
# for dot net tool #https://stackoverflow.com/questions/51977474/install-dotnet-core-tool-dockerfile
ENV PATH="${PATH}:/root/.dotnet/tools"

# Supervisor
RUN apt-get update -y && apt-get install -y supervisor && mkdir -p /etc/supervisor

# main script as defacult command when docker container runs
# Run the main sh script to run script in each xxx/*/db-migrate.sh. 
CMD ["/xxx/main-migrate.sh"]

# Microservice files
ADD xxx /xxx

# install the xxx deploy tool
WORKDIR /xxx
RUN for d in /xxx/*/ ; do cd "$d"; if [ -f "./install.sh" ]; then sh ./install.sh; fi; done

install.sh中,代码如下:

dotnet tool install -g xxx.DEPLOY --version [$(cat version)] --add-source /xxx/

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

  

./ install.sh:1:.//install.sh:dotnet:找不到

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

在Docker构建过程中如何调用位于外壳脚本文件中的dotnet命令?

谢谢

1 个答案:

答案 0 :(得分:1)

FROM ubuntu:16.04
FROM microsoft/dotnet:2.2-sdk as build-env

在上述各行中,FROM ubuntu:16.04将被完全忽略,因为应该只有一个基础图像,因此最后一个FROM将是considered as a base image,即{ {1}}而不是Ubuntu。

因此,如果您的基本映像是FROM microsoft/dotnet:2.2-sdk,那么为什么还要麻烦运行这些复杂的脚本来安装 dotnet

您最好检查一下dotnet的版本。

FROM microsoft/dotnet:2.2-sdk as build-env

输出

FROM microsoft/dotnet:2.2-sdk as build-env
RUN dotnet --version