【Docker】dockerfile识别当前构建的镜像平台

在编写dockerfile的时候,可能会遇到需要针对不同平台进行不同操作的时候,这需要我们对dockerfile进行针对性修改。

比如opencv的依赖项libjasper-dev在ubuntu18.04上就需要根据不同的平台做不同的处理,关于这个库的安装在另外一篇博客里面有介绍。

在dockerfile中,我们可以通过下面的方式来区分当前编译的镜像平台是什么。

这里使用ARG引入了变量TARGETARCH,这是docker的builder会自动传入的一个变量,指代的是当前构建的镜像的版本。通过这个变量我们就可以写判断语句,根据不同的平台做不同的操作了。

dockerfile 复制代码
ARG TARGETARCH
COPY install/libjasper /tmp/install/libjasper
RUN if [ "$TARGETARCH" = "amd64" ]; then \
        echo "Installing libjasper for amd64"; \
        chmod 777 /tmp/install/libjasper/install_libjasper_amd64.sh; \
        /tmp/install/libjasper/install_libjasper_amd64.sh; \
    elif [ "$TARGETARCH" = "arm64" ]; then \
        echo "Installing libjasper for arm64"; \
        chmod 777 /tmp/install/libjasper/install_libjasper_arm64.sh; \
        /tmp/install/libjasper/install_libjasper_arm64.sh; \
    else \
        echo "Unsupported architecture for install libjasper: $TARGETARCH"; \
        exit 1; \
    fi

问题就解决啦!

本文首发于❄慕雪的寒舍

相关推荐
GokuCode1 小时前
【5分钟学Docker】Docker快速使用
docker·云原生·eureka·5分钟快速学·docker入门
烦躁的大鼻嘎2 小时前
【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理
linux·运维·服务器·ubuntu·centos
chenzhuyu2 小时前
海康摄像机在Edge浏览器的网页无法直接预览,按照要求安装WebComponents后仍然提示请安装插件或预览失败的解决办法
运维
极小狐2 小时前
如何减少极狐GitLab 容器镜像库存储?
运维·git·rpc·kubernetes·ssh·gitlab·terraform
cooldream20093 小时前
深入理解负载均衡:传输层与应用层的原理与实战
运维·负载均衡·系统架构师
YoungHong19923 小时前
Ubuntu通过源码编译方式单独安装python3.12
linux·运维·python·ubuntu
家庭云计算专家3 小时前
onlyoffice 源码调试指南-ARM和x86双模式安装支持
arm开发·docker·容器·云计算
IT小饕餮3 小时前
华为设备MSTP
运维·华为
传知摩尔狮3 小时前
深入理解 Linux 虚拟文件系统(VFS)
linux·运维·服务器·性能优化
大G哥3 小时前
云计算-私有云-私有云服务运维
运维·云计算