在编写 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
|
问题就解决啦!