【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

问题就解决啦!

本文首发于❄慕雪的寒舍

相关推荐
破刺不会编程2 小时前
socket编程UDP
linux·运维·服务器·网络·c++·网络协议·udp
ayaya_mana3 小时前
Nginx性能优化与安全配置:打造高性能Web服务器
运维·nginx·安全·性能优化
我不要放纵9 小时前
docker
运维·docker·容器
morliz子轩9 小时前
基于WSL搭建Ubuntu 22.04.x LTS开发环境
linux·运维·ubuntu
BJ_Bonree9 小时前
数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
运维·科技
Janspran10 小时前
嵌入式linux学习 -- 进程和线程
linux·运维·学习
Cosmoshhhyyy10 小时前
linux远程部署dify和mac本地部署dify
linux·运维·macos
SirLancelot111 小时前
K8s-kubernetes(二)资源限制-详细介绍
微服务·云原生·容器·kubernetes·k8s·devops·kubelet
路多辛12 小时前
Debian新一代的APT软件源配置文件格式DEB822详解
linux·运维·ubuntu·debian
油丶酸萝卜别吃13 小时前
nginx配置代理服务器
运维·网络·nginx