检查 dockerfile 中的架构以获取 amd/arm

Nic*_*ies 23 debian x86-64 docker dockerfile apple-m1

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

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

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

if xyz === 'arm64'
    RUN wget http://...../arm64.deb
else 
    RUN wget http://...../amd64.deb
Run Code Online (Sandbox Code Playgroud)

Rom*_*ain 23

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

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

RUN arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \
    wget "http://...../${arch}.deb"
Run Code Online (Sandbox Code Playgroud)

注意:您应该在运行此命令之前添加以下代码,以防止管道链出现故障时出现意外行为。请参阅HadolintDL4006了解更多信息。

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
Run Code Online (Sandbox Code Playgroud)