一、背景

docker 可以在 arm 平台上运行,验证 docker 镜像最直接的方式是在 arm 平台上,但有时候需要在 PC 平台上验证 arm 平台的镜像。本文对此进行介绍。

二、x86依赖环境

x86 无法运行 arm 平台程序,但是 qemu 提供了机制,通过 qemu-arm-static 可以达到目的。在 ubuntu 上安装:

1sudo apt install qemu-user-static

二、实验

Dockerhub 有一些 arm 版本的镜像。以busybox为例。

下载armhf版本的镜像:

1docker pull armhf/busybox

尝试运行:

1

2# docker run -it --rm --name armhfbusybox armhf/busybox

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

提示出错。

挂载 qemu-arm-static,再运行一次:

1docker run -it --rm --name armhfbusybox -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static armhf/busybox

释义:

-it 指定为交互方式。

–name 指定容器名称。

-v 为挂载文件。

可以成功进入容器,查看内核:

1

2

3/ # uname -a

Linux 87a4431f6f03 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 armv7l GNU/Linux

/ #

架构为 armv7l, 但内核版本与主机完全一致。如下:

1

2# uname -a

Linux latelee 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

从实验知,容器内必须有qemu-arm-static文件,否则无法跑起来。可以在构建时拷贝至镜像中,也可在运行时挂载。有些镜像已经有 qemu-arm-static,直接正常运行即可。如:

1docker run -it --rm multiarch/alpine:armhf-edge /bin/sh

三、qemu-user-static镜像

可以借助 qemu-user-static 镜像,此情况下无须手动拷贝 qemu-arm-static。

1

2

3

4

5# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# docker run --rm -t arm32v7/ubuntu:16.04 uname -m

armv7l

# docker run --rm -t arm64v8/ubuntu:16.04 uname -m

aarch64

出错

提示:

1

2Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm

sh: write error: Invalid argument

去掉yes。

参考:

arm架构linux运行docker失败,armdocker:在x86上模拟运行arm容器相关推荐

  1. ARM架构下部署docker

    ARM架构下部署docker 1 环境要求 2 安装与配置docker 2.1? 下载Docker静态包 2.2 移值docker静态包以及组件 2.3 配置docker.service文件 2.4 ...

  2. 10_Linux ARM架构-离线部署 Docker + MongoDB-银河麒麟V10操作系统

    大家好,我是星仔.本博客收录于华星详谈-学习中心.本学习中心收集了Java整个技术体系的所有技术要点.每篇博客后面或者知识点结尾都附带有面试题,提供给大家巩固本章内容. 为各位同胞们能够系统性的掌握整 ...

  3. 华为鲲鹏arm架构linux服务器安装mysql教程

    遇到一个项目是华为鲲鹏arm架构linux服务器(CentOS 7.5 with ARM),刚开始一直按照X86的教程在执行,后来mysql的本地编译命令出现了二进制的错误,于是想到了这个是鲲鹏arm ...

  4. 小知识点:ARM 架构 Linux 大数据集群基础环境搭建(Hadoop、MySQL、Hive、Spark、Flink、ZK、Kafka、Nginx、Node)

      换了 M2 芯片的 Mac,以前 x86 版本的 Linux 大数据集群基础环境搭建在 ARM 架构的虚拟机集群上有些用不了了,现在重新写一份基于 ARM 架构的,少数不兼容之外其他都差不多,相当 ...

  5. 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写

    bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...

  6. arm架构linux内核调试实战

    前言 偶然间,发现了一个很好用的仓,可以十分方便地进行 arm 架构的 linux 内核调试,该仓地址如下 https://github.com/cc-droid/v-kernel-qemu ,对应的 ...

  7. arm架构linux进程调试,gdb-multiarch + gdbserver调试linux arm应用程序

    首先安装gdb-multiarch sudo apt-get install gdb-multiarch 把编译好的gdbserver发送到板子目录下 查看gdbsever版本 gdbserver - ...

  8. arm架构linux系统平板电脑推荐,x86平板电脑排行_X86平板电脑推荐成垃圾,ARM架构平板电脑品牌是王道...

    X86平板电脑推荐成垃圾,ARM架构平板电脑品牌是王道 JPG,602x402,231KB,374_250 x86平板电脑推荐 JPG,602x402,231KB,374_250 x86平板电脑推荐 ...

  9. linux下float的寄存器,检测x86上Linux的非正常浮动操作(Detecting denormal float operations on Linux for x86)...

    检测x86上Linux的非正常浮动操作(Detecting denormal float operations on Linux for x86) 我正在将一个windows程序移植到linux的过程 ...

最新文章

  1. 01. Node js Hello world
  2. 企业私有云解决方案(基于桌面与服务器虚拟化技术)
  3. Bailian2696 计算表达式的值【入门】
  4. 实战Citrix XenDesktop 5.5部署
  5. mac查看进程与杀掉进程
  6. Python 定时关机、重启命令
  7. 驱动人生8新版助力电脑性能起飞
  8. OpenCV中Rect()函数常用操作和使用详解(含绘图示例)+Rectangle()函数用法
  9. 通信LOGO隐秘史(续集:运营商篇)
  10. HS0038红外接收模块遇到的问题
  11. Android Framework 音频子系统(02)音频系统框架
  12. Django实战教程: 开发企业级应用智能文档管理系统smartdoc(1)
  13. 传统蓝牙BR/EDR的搜索Inquiry
  14. EasyExcel3.0.5 解决大数据导入导出,防止OOM
  15. Completed 404 NOT_FOUND,Whitelabel Error Page
  16. smart-sso单点登录(三):App登录支持
  17. Mac 系统下查看隐藏文件夹的方法
  18. python中pymysql的小坑
  19. vue-router的addRoute方法实现权限控制
  20. 印象笔记桌面快捷键图标显示不出来,重装无效(win10图文版)

热门文章

  1. iOS 设计中 网络请求之 同步请求(json 请求--新方法和老方法)
  2. PowerDesigner-制作Word导出模版
  3. java moneyutils_java中每月等额与先息后本计算
  4. python 检测列表中是否有空值,检查python列表中是否已经存在数字
  5. 2019年第二届全国大学生大数据技能竞赛通知
  6. 侏儒排序算法原理与Python实现
  7. tomcat7.0支持什么版本的jdk_JDK/Java 16 可能带来什么新特性?
  8. shell 执行失败重试_Smart Retry主要是用来进行方法重试
  9. Mysql 里的约束
  10. 服务器webpack构建性能,[译] 优化 WEBPACK 以更快地构建 REACT