【问题标题】:Error running docker build for arm32v7 container on amd64 linux machine: standard_init_linux.go:207在 amd64 linux 机器上为 arm32v7 容器运行 docker build 时出错:standard_init_linux.go:207
【发布时间】:2019-09-27 12:53:29
【问题描述】:

我有一台 amd64 linux 机器,用于构建 arm32v7 容器。当docker build 遇到第一个 RUN 命令时,它会出错:

standard_init_linux.go:207: exec user process caused "no such file or directory"

通过在 amd64 linux 主机上运行 docker run -it arm32v7/ubuntu:xenial,无需 docker 文件即可轻松复制此内容。

我在其他地方看到过这种抱怨,但大多数建议是您需要在 arm32v7 主机上构建 arm32v7 容器。这是相当不切实际的。

我在 Ubuntu 19.04 和 18.10 上成功添加了一些架构仿真:

sudo apt-get install -y qemu qemu-user-static qemu-user binfmt-support

添加这些包后,错误消失了,我可以创建我的 arm32v7 容器。

但是,这适用于 Ubuntu 18.04 或 16.04。

是否有通用的解决方案适用于任何地方?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    似乎有一些安装后步骤在 Ubuntu 18.04 和 16.04 上失败了。

    这里有几个解决方法可以解决 18.04 和 16.04 上的问题。

    方法一:

    git clone https://github.com/computermouth/qemu-static-conf.git
    sudo mkdir -p /lib/binfmt.d
    sudo cp qemu-static-conf/*.conf /lib/binfmt.d
    sudo systemctl restart systemd-binfmt.service
    

    方法二:

    sudo mkdir -p /lib/binfmt.d
    sudo sh -c 'echo :qemu-arm:M::\\x7fELF\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xfe\\xff\\xff\\xff:/usr/bin/qemu-arm-static:F > /lib/binfmt.d/qemu-arm-static.conf'
    sudo sh -c 'echo :qemu-aarch64:M::\\x7fELF\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xfe\\xff\\xff\\xff:/usr/bin/qemu-aarch64-static:F > /lib/binfmt.d/qemu-aarch64-static.conf'
    sudo systemctl restart systemd-binfmt.service
    

    【讨论】:

      【解决方案2】:

      这行得通,但它是多余的一层。我在 U18.04 上使用 QEMU 做了很多工作,并且只需要这样做一次,因为最近的内核包含 binfmt_misc 模块(无服务层)。

      注意,我构建了自己最近的 QEMU,因为 Debian/Ubuntu 发行版有一个非常旧的版本(我记得是 2.x)。维护人员遗漏的一个关键是 --fix-binary yes 字段。

      为 aarch64 安装神奇的 ELF 映射:

          QEMU_AARCH64_EXEC=/opt/distros/qemu-5.1.0/bin/debug/native/aarch64-linux-user/qemu-aarch64
          sudo update-binfmts \
               --package qemu-user-static \
               --install qemu-aarch64 $QEMU_AARCH64_EXEC \
               --magic '\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00' \
               --mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff' \
               --offset 0 \
               --credential yes \
               --fix-binary yes
          update-binfmts --display | grep 'qemu-aarch64 ' -A 7
      

      要删除映射:

          sudo update-binfmts --package qemu-user-static --remove qemu-aarch64 $QEMU_AARCH_EXEC
          update-binfmts --display
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-28
        • 2017-02-01
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 2020-02-05
        • 2020-08-16
        相关资源
        最近更新 更多