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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

问题就解决啦!