检查 dockerfile 中的体系结构以获取 amd/arm

Check architecture in dockerfile to get amd/arm

我们正在使用 Windows 和 Mac M1 机器在本地使用 Docker 进行开发,需要在我们的 docker 环境中获取并安装 .deb 包.

软件包需要 amd64/arm64,具体取决于所使用的体系结构。

有没有办法在 docker 文件中确定这一点,即

if xyz === 'arm64'
    RUN wget http://...../arm64.deb
else 
    RUN wget http://...../amd64.deb

首先,您需要检查是否有其他(更简单的)方法可以使用包管理器完成此操作。

可以使用arch命令获取架构(相当于uname -m)。问题是它没有 return 您期望的值(aarch64 而不是 arm64x86_64 而不是 amd64)。所以你必须转换它,我已经通过sed.

完成了
RUN arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \
    wget "http://...../${arch}.deb"

注意:您应该在 运行 此命令之前添加以下代码,以防止在管道链发生故障时出现意外行为。有关详细信息,请参阅 Hadolint DL4006

SHELL ["/bin/bash", "-o", "pipefail", "-c"]