在x86/amd64的机器上使用Docker运行arm64v8/ubuntu并安装ROS1

一、准备工作

主要是因为国内网络的问题,可能导致镜像拉取失败,解决办法参考:镜像加速

二、安装运行过程

2.1拉取镜像:

sudo docker pull arm64v8/ubuntu:20.04

这个是ubuntu的拉取指令,其他的也是类似。

2.2 运行镜像

为了在 AMD64 主机上运行 ARM64 容器,你需要安装 QEMU 并注册 binfmt 支持。以下是详细步骤:

安装 QEMU

安装 QEMU 用户模式仿真器:
sudo apt-get update
sudo apt-get install -y qemu-user-static
注册 binfmt:

Docker 提供了一个方便的镜像来注册 binfmt,可以使用以下命令:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
验证 QEMU 是否正确安装

你可以使用以下命令来验证:

docker run --rm --privileged multiarch/qemu-user-static:register --reset
运行 ARM64 容器

在安装和注册 QEMU 之后,你应该可以在 AMD64 主机上运行 ARM64 容器:

sudo docker run --platform linux/arm64 -it arm64v8/ubuntu:20.04

2.3 宿主机目录共享

在 Docker 中,可以通过挂载主机目录到容器内的方式实现目录共享。这通常是通过 -v 或 --mount 选项来实现的。以下是具体的步骤和示例:

使用 -v 选项挂载目录

-v 选项用于挂载主机目录到容器内的目录。格式为:-v 主机目录:容器目录。

sudo docker run --platform linux/arm64 -it -v /path/on/host:/path/in/container arm64v8/ubuntu:20.04 /bin/bash

例如,将主机的 /home/user/shared 目录挂载到容器内的/mnt/shared目录:

sudo docker run --platform linux/arm64 -it -v /home/user/shared:/mnt/shared arm64v8/ubuntu:20.04 /bin/bash

使用 --mount 选项挂载目录

例如,将主机的 /home/user/shared 目录挂载到容器内的 /mnt/shared 目录:

sudo docker run --platform linux/arm64 -it --mount type=bind,source=/home/user/shared,target=/mnt/shared arm64v8/ubuntu:20.04 /bin/bash

通过这些方法,可以在 Docker 容器和宿主机之间共享目录,从而方便地在两者之间交换文件。

2.4 启动&删除容器

列出当前的所有容器:

sudo docker ps -a

启动指定的容器:

sudo docker start -i CONTAINER ID

或者使用容器名字

sudo docker start -i 容器名字

删除所有停止运行的容器

sudo docker container prune

删除特定容器

删除特定的容器,假设容器 ID 是 e5c2c5dabc12:

sudo docker rm e5c2c5dabc12

删除所有未使用的镜像、网络和挂载

sudo docker system prune -a

三、安装ROS1

步骤1: 更新和安装基本工具

首先,在容器中更新软件包列表并安装一些基本的工具:

apt-get update
apt-get install -y curl gnupg2 lsb-release

步骤2: 添加ROS Noetic源

添加ROS源到APT源列表

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

步骤3: 添加ROS密钥并安装ROS Noetic

  • 1.添加 ROS 密钥:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
  • 2.更新软件包索引:
apt-get update
  • 3.安装桌面完整版
apt-get install -y ros-noetic-desktop-full

步骤4: 初始化rosdep

安装完 ROS 后,需要初始化 rosdep:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

步骤5: 测试安装

roscore

这将启动 ROS 主节点。如果能够成功启动,说明 ROS Noetic 已经安装和配置成功。

四、遇到的问题

运行指令:

 docker run --rm --privileged multiarch/qemu-user-static:register --reset
Unable to find image 'multiarch/qemu-user-static:register' locally

是因为 multiarch/qemu-user-static:register 镜像未找到。我们可以先拉取这个镜像,然后再运行命令来注册 QEMU。
注意需要在注册QEMU之前,先运行这个指令:

sudo docker pull multiarch/qemu-user-static

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DevOps】运维过程中经常遇到的Http错误码问题分析(一)

一、解决HTTP 408错误:上传3M文件时请求超时的问题 在开发Web应用程序时,遇到HTTP 408状态码(请求超时)是常见的问题。特别是在上传大文件时,这种情况更容易发生。本文将探讨在上传一个3M文件时,Web服务器…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&am…

封锁-封锁模式(共享锁、排他锁)、封锁协议(两阶段封锁协议)

一、引言 1、封锁技术是目前大多数商用DBMS采用的并发控制技术,封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化 2、基于锁的并发控制的基本思想是: 当一个事务对需要访问的数据库对象,例如关系、元组等进行操作…

【嵌入式开发 Linux 常用命令系列 1.6 -- grep 过滤指定的目录】

请阅读【嵌入式开发学习必备专栏 】 文章目录 grep 过滤指定目录 grep 过滤指定目录 在Linux中使用grep搜索字符串并希望排除特定目录时,可以使用--exclude-dir参数。这个参数允许你指定一个或多个目录名称来排除它们的内容不被grep搜索。这对于忽略一些常见的临时…

LLM - 词向量 Word2vec

1. 词向量是一个词的低维表示,词向量可以反应语言的一些规律,词意相近的词向量之间近乎于平行。 2. 词向量的实现: (1)首先使用滑动窗口来构造数据,一个滑动窗口是指在一段文本中连续出现的几个单词&#x…

llamaindex实战-使用本地大模型和数据库对话

概述 本文使用NLSQLTableQueryEngine 查询引擎来构建SQL的自然语言处理查询。 请注意,我们需要指定要与该查询引擎一起使用的表。如果我们不这样做,查询引擎将提取所有架构上下文,这可能会溢出 LLM 的上下文窗口。 在以下情况都可以使用NL…

如何用Java写一个整理Java方法调用关系网络的程序

大家好,我是猿码叔叔,一位 Java 语言工作者,也是一位算法学习刚入门的小学生。很久没有为大家带来干货了。 最近遇到了一个问题,大致是这样的:如果给你一个 java 方法,如何找到有哪些菜单在使用。我的第一想…

线程中如何有效避免死锁问题

1. 理解死锁形成的原因 互斥条件:一个资源每次只能被一个线程使用。 请求与保持条件:线程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:线程已获得的资源,在末使用完之前,不能强行剥夺。 循环…

c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系

c primer plus 第15章友,异常和其他:15.1.3 其他友元关系 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 15.1.3 其他友元关系 提示:写完文章后,目录可以自动生成,如何生成可…

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 在历史上,我们曾经这样描…

科研绘图系列:R语言双侧条形图(bar Plot)

介绍 双侧条形图上的每个条形代表一个特定的细菌属,条形的高度表示该属的LDA得分的对数值,颜色用来区分不同的分类群或组别,它具有以下优点: 可视化差异:条形图可以直观地展示不同细菌属在得分上的差异。强调重要性:较高的条形表示某些特征在区分不同组别中具有重要作用…

# Sharding-JDBC从入门到精通(6)-- Sharding-JDBC 水平分库 和 垂直分库。

Sharding-JDBC从入门到精通&#xff08;6&#xff09;-- Sharding-JDBC 水平分库 和 垂直分库。 一、Sharding-JDBC 水平分库-分片策略配置 1、分库策略定义方式如下 # 分库策略&#xff0c;如何将一个逻辑表映射到多个数据源 spring.shardingsphere.sharding.tables.<逻…

第33集《大乘起信论》

《大乘起信论》和尚尼慈悲&#xff0c;诸位法师、诸位居士&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09;请大家打开《讲义》第七十四页&#xff0c;子二、释观。 本论的特色&#xff0c;一言以蔽之就是文简意赅、辞约理富&#xff0c;就是说…

VUE2拖拽组件:vue-draggable-resizable-gorkys

vue-draggable-resizable-gorkys组件基于vue-draggable-resizable进行二次开发, 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线 安装: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos&#xff08;磁盘操作系统&#xff09;界面命令下不区分大小写&#xff1b; 1.2. 文件格式区分 windows用扩展名区分文件&#xff1b;如.exe代表执行文件&#xff0c;.txt代表文本文件&#xff0c;.…

运用Python与Keras框架打造深度学习图像分类应用:详尽步骤与代码实例解析

引言 随着深度学习技术的飞速发展&#xff0c;其在图像识别和分类领域的应用日益广泛。在这一背景下&#xff0c;Python因其丰富的数据科学库和强大的生态系统而成为首选编程语言之一。在本文中&#xff0c;我们将深入探讨如何使用Python和其中的Keras深度学习框架来完成一个实…

手动将dingtalk-sdk-java jar包打入maven本地仓库

有时候,中央镜像库不一定有自己需要的jar包,这时候我们就需要用到该方法,将jar打入maven本地仓库,然后项目中,正常使用maven的引入规则。 mvn install:install-file -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\repo -DgroupId=ding…

学习笔记——交通安全分析11

目录 前言 当天学习笔记整理 4信控交叉口交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期10笔记 #最近确实太懒了&#xff0c;接受…

跨越数据边界:域适应在目标检测中的革新作用

标题&#xff1a;跨越数据边界&#xff1a;域适应在目标检测中的革新作用 在机器学习和计算机视觉领域&#xff0c;尤其是目标检测任务中&#xff0c;域适应&#xff08;Domain Adaptation&#xff09;是一种关键技术&#xff0c;它解决了模型在不同数据分布上的泛化问题。当训…

C语言字节对齐技术在嵌入式、网络与操作系统中的应用与优化

第一部分&#xff1a;嵌入式系统中的字节对齐 嵌入式系统通常对性能和资源有着严格的要求。在这些系统中&#xff0c;字节对齐的正确使用可以显著提高数据访问速度&#xff0c;减少内存占用&#xff0c;并提高系统的整体效率。 一、嵌入式系统中的字节对齐挑战 嵌入式系统中…