【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

问题就解决啦!

本文首发于❄慕雪的寒舍

相关推荐
cyclejune4 分钟前
5 个本地 AI Agent 自动化工作流实战
运维·人工智能·自动化·clawdbot·openclaw
Johnstons9 分钟前
2026企业网络流量监控与分析工具对比
运维·网络·数据库·网络流量监控·网络流量分析
IMPYLH23 分钟前
Linux 的 dirname 命令
linux·运维·服务器·数据库
.柒宇.1 小时前
基于 RHEL 9.7 搭建 Kubernetes v1.34 集群实战:Docker 运行时 (cri-dockerd) 与国内源配置详解
docker·云原生·容器·kubernetes·kubelet
F1FJJ1 小时前
Shield CLI:MySQL 插件 vs phpMyAdmin:轻量 Web 数据库管理工具对比
前端·网络·数据库·网络协议·mysql·容器
桌面运维家1 小时前
DHCP监控:IP冲突诊断与网络稳定运维实战
运维·网络·tcp/ip
钟智强1 小时前
从2.7GB到481MB:我的Docker Compose优化实战,以及为什么不能全信AI
后端·docker
石头猫灯2 小时前
DNS 服务器配置实验
运维·服务器
认真的薛薛2 小时前
Docker网络模式
linux·运维·数据库·面试·github
民乐团扒谱机2 小时前
【读论文】Frequency Comb Based Optical Time Transfer基于光频梳的光时间传递
运维·服务器