shell - 为什么在 dockerfile 中找不到 dotnet 命令?
问题描述
我尝试运行位于 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-env
& RUN apt-get update -y && apt-get install dotnet-sdk-2.2 -y
,但是为什么 Docker 在构建过程中找不到 dotnet 命令?
如何dotnet
在 docker 构建过程中调用位于 shell 脚本文件中的命令?
谢谢
解决方案
FROM ubuntu:16.04
FROM microsoft/dotnet:2.2-sdk as build-env
在上面的行FROM ubuntu:16.04
中将被完全忽略,因为应该只有一个基础镜像,所以最后一个FROM
将被视为不是FROM microsoft/dotnet:2.2-sdk
ubuntu的基础镜像。
因此,如果您的基本映像是FROM microsoft/dotnet:2.2-sdk as build-env
那么为什么要运行这些复杂的脚本来安装dotnet呢?
你很高兴去检查 dotnet 的版本。
FROM microsoft/dotnet:2.2-sdk as build-env
RUN dotnet --version
输出
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
推荐阅读
- java - 比较两个数字字符串值的更好方法
- r - 闪亮的 addpopover 函数不适用于 uioutput
- node.js - Node.js 将用户添加到现有的谷歌表格
- python - 为什么我收到错误“列表索引超出范围”?
- reactjs - 如何相对于参考位置定位绝对定位的元素
- node.js - 使用 Node.js 删除文件
- python - ImportError 没有名为“PyPDF2”的模块
- python - 一组整数元组的内存高效数据结构
- openssl - openssl 无法加载私钥 PEM_do_header:bad decrypt
- c - 从 uint64_t 转换为 double 会导致值不正确