【问题标题】:Check architecture in dockerfile to get amd/arm检查 dockerfile 中的架构以获取 amd/arm
【发布时间】:2022-01-18 23:23:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: docker dockerfile debian amd apple-m1


    【解决方案1】:

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

    您可以使用arch 命令获取架构(相当于uname -m)。问题是它没有返回您期望的值(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"]
    

    【讨论】:

    • 这是很棒的东西。像魅力一样工作,我明天会在 Windows 上试一试,但在手臂上完美工作。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多