检查 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
而不是 arm64
和 x86_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"]
我们正在使用 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
而不是 arm64
和 x86_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"]