docker-ros-gui

2023-05-16

主机环境
系统 Ubuntu 16.04

1 安装docker

1.1 在线安装(物理机)
默认使用当前最新版本
1.更新apt包索引:
sudo apt-get update
2.安装以下包以使apt可以通过HTTPS使用存储库(repository):
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
3.添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.使用下面的命令来设置stable存储库:
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
5.再更新一下apt包索引:
sudo apt-get update
6.安装最新版本的Docker CE:
sudo apt-get install -y docker-ce
7.查看当前版本验证是否成功:
docker --version 显示当前版本表示安装成功

2 拉取镜像(物理机)

将拉取的ros镜像,安装x11-apps用于弹出gui,设置display变量,进行build产生新镜像
以下整段一起执行
sudo docker build -t imagename - << EOF
FROM ros:kinetic-robot
WORKDIR /home/nuctech
USER nuctech
ENV DISPLAY :0
CMD imagename
EOF
注释:
ros:kinetic-robot:为ros版本,可根据所需版本获取
imagename :镜像build名称前后保持一致

3 设置环境变量(物理机)

XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
可以编辑这个文件将以上两个值写入,便可永久生效每次重启后便可不在设置。
vim /etc/environment

4 生成临时文件.docker.xauth(物理机)

在/tmp目录下,生成临时文件.docker.xauth
sudo xauth nlist :0 | sed -e ‘s/^…/ffff/’ | xauth -f $XAUTH nmerge -

5 创建ROS容器(物理机)

sudo docker run -ti --name gui -v X S O C K : XSOCK: XSOCK:XSOCK -p 3306:3306 -p 8080:8080 -v X A U T H : XAUTH: XAUTH:XAUTH -e XAUTHORITY=$XAUTH imagename /bin/bash
如提示输入登录密码,则输入登录密码即可
创建成功自动进入容器
apt-get update(容器内)
apt-get install -qqy x11-apps(容器内)
–name 后为容器名称
–imagename 镜像名称
-p 标识来指定容器端口绑定到主机端口。绑定后访问主机ip:端口便可访问容器程序,若需绑定多个 端口可多次使用-p参数

6 容器导入导出(物理机)

6.1 导出容器–docker export
导出容器快照(建议容器暂停后操作)
sudo docker export -o 容器快照名.tar container_name

sudo docker export container_id > 容器快照名.tar
-o表示输出到
例:使用sudo docker ps -a 查看所有容器
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
F91CAB8069E4 kinetic-robot … … … … gui
使用以上容器id导出操作如下:
sudo docker export F91CAB8069E4>gui.tar
导出完成后,会产生该快照文件
6.2 导入容器–docker import
可以随时导入容器快照
sudo docker import [options] file|URL|- [REPOSITORY[:TAG]]
例:使用sudo docker images 查看所有镜像信息
sudo docker import gui.tar gui:wqtest
sudo docker images
PEPOSITOTY TAG IMAGE ID CREATED SIZE
gui:wqtest latest 1d90cb6b6694 1min ago 1.51GB
导入镜像后创建容器重复2-5章节

注:gui.tar 导入容器的快照名称
gui:wqtest 为容器导入后设置镜像名称及tag版本

7 ROS多机通信

目标:将2台主机中的容器可相互访问,相互操作
场景:有2台主机主机ip分别是主机A:192.168.28.161 主机B192.168.28.172

主机A:
进入容器中安装SVN客户端
sudo start docker newgui
sudo docker exec -it newgui /bin/bash
apt-get install subversion
主机B
sudo docker run -ti --name gui -p 3690:3690 -v X S O C K : XSOCK: XSOCK:XSOCK -v X A U T H : XAUTH: XAUTH:XAUTH -e XAUTHORITY=$XAUTH imagename /bin/bash
上图3690为SVN服务器默认端口。
apt-get install subversion //安装svn服务器
svnserve --version //显示版本表示安装成功
创建仓库、添加权限 可参考以下连接
https://blog.csdn.net/zengsange/article/details/80618301
svnserve -d -r /usr/svn/ //启动SVN服务
本次用于测试创建仓库名为repository
测试通信:
主机A newgui容器内:
cd /svn/test
svn co svn://192.168.28.172:3690/repository //将主机B gui容器中svn服务器代码checkout到本地,
touch 161.txt /
svn add 161.txt
svn ci -m “192.168.28.161”161.txt
主机B svn容器内
cd /usr/test/repository
svn update
以上操作均成功,表示主机A-newgui容器和主机B-svn容器可通信

8 docker容器中文件的上传与下载(物理机)

8.1 上传文件
sudo docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
[OPTIONS]:保持源目标中的链接
例:sudo docker cp /root/test.txt ecef8319d2c8:/root/
将当前系统/root/test.txt拷贝到容器id为ecef8319d2c8的/root/目录
8.2 下载文件
sudo docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
[OPTIONS]:保持源目标中的链接
sudo docker cp ecef8319d2c8:/root/test.txt /root/
将容器id为ecef8319d2c8的/root/test.txt 下载到当前系统/root/目录中

9相关命令

9.1 docker相关命令
1.查看docker服务是否启动systemctl status docker
2.启动docker服务sudo systemctl start docker
3.查看镜像 sudo docker images
4.删除镜像 sudo docker rmi images_id
5.查看当前活动容器sudo docker ps
6.查看所有容器sudo docker ps -a
7.删除容器sudo docker rm containerid/names
8.启动容器sudo docker start containerid/name
9.进入容器 sudo docker exec -it containerid/name /bin/bash
10.退出容器exit
11.关闭容器sudo docker stop containerid/name
12.查看主机端口 sudo netstat -tlpn
13.来查看当前映射的端口配置sudo docker port containerid
14.创建文件夹 mkdir name
15.查看文件夹内容 ll

9.2 关机重启后进入容器需执行
1.XSOCK=/tmp/.X11-unix
2.XAUTH=/tmp/.docker.xauth
3.xhost +si:localuser:root
4.sudo xauth nlist :0 | sed -e ‘s/^…/ffff/’ | xauth -f $XAUTH nmerge -
5.sudo docker start containerid
6.sudo docker exec -it conatinerid /bin/bash

10 常见问题

docker.xauth
描述:
执行sudo xauth nlist :0 | sed -e ‘s/^…/ffff/’ | xauth -f X A U T H n m e r g e − 报 以 下 问 题 1 、 X a u t h : f i l e / t m p / d o c k e r . x a u t h d o e s n o t e x i s t 解 决 方 案 : 可 以 去 / t m p 目 录 下 查 看 , 若 文 件 已 产 生 该 文 件 , 可 忽 略 该 问 题 2 、 d o c k e r . x a u t h 为 目 录 不 可 写 解 决 方 案 : 方 案 一 : 关 机 重 启 , 再 次 设 置 环 境 变 量 方 案 二 : 删 除 / t m p 下 d o c k e r . x a u t h 文 件 夹 , 再 次 执 行 环 境 变 量 M I T − M A G I C − C O O K I E − 1 K e y E r r o r : 描 述 : 在 容 器 中 执 行 程 序 报 M I T − M A G I C − C O O K I E − 1 K e y E r r o r : C a n ’ t o p e n d i s p l a y : : 0 解 决 方 案 : 此 时 执 行 在 主 机 中 执 行 x h o s t + s i : l o c a l u s e r : r o o t 再 次 执 行 程 序 问 题 解 决 。 E r r o r : c a n ’ t o p e n d i s p l a y 描 述 : 在 容 器 中 执 行 程 序 报 E r r o r : c a n ’ t o p e n d i s p l a y : 解 决 方 案 : 先 查 看 主 机 XAUTH nmerge -报以下问题 1、Xauth: file /tmp/docker.xauth does not exist 解决方案: 可以去/tmp目录下查看,若文件已产生该文件,可忽略该问题 2、docker.xauth为目录不可写 解决方案: 方案一:关机重启,再次设置环境变量 方案二:删除/tmp下docker.xauth文件夹,再次执行环境变量 MIT-MAGIC-COOKIE-1 KeyError: 描述: 在容器中执行程序报MIT-MAGIC-COOKIE-1 KeyError:Can’t open display: :0 解决方案: 此时执行在主机中执行xhost +si:localuser:root再次执行程序问题解决。 Error:can’t open display 描述: 在容器中执行程序报Error:can’t open display: 解决方案: 先查看主机 XAUTHnmerge1Xauth:file/tmp/docker.xauthdoesnotexist/tmp2docker.xauth/tmpdocker.xauthMITMAGICCOOKIE1KeyErrorMITMAGICCOOKIE1KeyError:Cantopendisplay::0xhost+si:localuser:rootError:cantopendisplayError:cantopendisplay:DISPLAY的值echo $DISKPLAY若为空则依次在主机和容器中执行export DISPLAY=:0,若主机值不为空则仅在容器中执行即可,再次执行程序问题解决。
port is already allocated
描述:
创建容器时报port is already allocated
解决方案:
表示当前主机中已有容器占用该端口,可使用sudo netstat -tlpn
查看当前主机被暂用端口,此时修改当前映射的主机端口即可。
Unable to locate package x11-apps
描述:
容器内安装x11-apps报apt-get install -qqy x11-apps以上错误
解决方案:
更新下apt-get update源后再次执行apt-get install -qqy x11-apps问题解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker-ros-gui 的相关文章

随机推荐

  • openMP使用

    openMP使用 项目需要对程序的运行进行加速 xff0c 在不考虑更换硬件的前提下 xff0c 考虑采用多线程对代码进行优化 xff0c 以下记录学习过程 处理器采用大疆秒算2 C xff0c CMakeList配置参考这篇博客 xff1
  • VSCode git工具

    之前都是老老实实用命令行敲命令 xff0c 其实VSCode自带得git工具已经非常方便 命令行提交代码 首先先介绍之前在命令行 ubuntu终端 xff0c windows git bash here 操作 xff1a 工程路径下 xff
  • vscode给docker内部的的ros工程代码打断点

    背景 打断点debug虽然不能直观看到变量在时间轴上的整体变化曲线 xff0c 但是其针对某一帧问题数据 xff0c 暂停后一步步单步执行监视每个变量的变化 xff0c 方便直观的判断每一步逻辑的正确性 xff0c 即使这个变量结构再复杂也
  • js中onclick()获取当前点击对象的属性值

    HTML span class token operator lt span a type span class token operator 61 span span class token single quoted string st
  • layui上传文件loading加载动画

    jquery layui 开始请求打开layui加载动画 所有请求结束后关闭layui加载动画 ajaxSetup 方法为将来的 AJAX 请求设置默认值 ajax请求中有一个beforeSend方法 xff0c 用于在向服务器发送请求前执
  • 微信小程序事件bindtap实现页面跳转

    index wxml通过bindtap 61 34 getUrl 34 设置一个名为getUrl事件 lt view class 61 34 tab con 34 gt lt view class 61 34 newsinfo 34 bin
  • 程序员找工作的个人经验教训以及注意事项

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 忽然间想到如果要找工作的话 xff0c 需要注意一些什么问题 没毕业的 xff0c 刚刚毕业的 xff0c 刚刚工作的都可以借鉴一
  • JavaScript逻辑运算与或非

    逻辑运算 amp amp 与 或 非 javascript中的逻辑运算两边的操作数 xff0c 可以是任意类型的任意值 默认布尔值 xff1a 当参与逻辑运算或判断语句中时 xff0c 任意类型的任意值都有一个默认的布尔型的值 与运算 xf
  • PHP面试题

    PHP知识 php反转字符串的三种方法 1 把分割字符串到一个数组中 xff0c 然后遍历拼接 xff1a lt php function joinStrrev str if strlen str lt 61 1 return str ne
  • tp6实现商城后台登录功能

    后台登录逻辑 1 没有登录状态 xff0c 访问后台页面都应该跳转到登录页 已经登录状态 xff1a 1 访问登录页面 xff0c 应该跳转到后台首页 解决方案 xff1a 后台登录拦截 xff1a 1 传统common base php控
  • Jenkins环境部署

    简介 Jenkins是一款开源 CI amp CD 软件 xff0c 用于自动化各种任务 xff0c 包括构建 测试和部署软件 Jenkins 支持各种运行方式 xff0c 可通过系统包 Docker 或者通过一个独立的 Java 程序 J
  • Nginx中Return指令使用

    Return指令使用 1 返回状态码 return 404 location test set name 39 user123 39 return 404 name curl i http 192 168 56 10 test 2 返回字符
  • MySQL触发器

    介绍 触发器是与表有关的数据库对象 xff0c 指在 insert update delete 之前或之后 xff0c 触发并执行触发器中定义的SQL语句集合 触发器的这种特性可以协助应用在数据库端确保数据的完整性 日志记录 数据校验等操作
  • 制作composer包提供sdk扩展

    目录 1 初始化包 2 将代码推送到github远程仓库 3 为写好扩展包打上tag标签标记当前代码版本 4 将包发布到包管理平台 初始化包 xff0c 生成 Creates a basic composer json file in cu
  • Go环境搭建与IDE开发工具配置

    安装Go语言编译器 Go语言编译器 61 编译器 61 将源代码编译为可执行程序 61 源代码 61 程序员使用高级语言所书写的代码文件 61 高级语言 61 c c 43 43 go 61 机器语言 61 0和1构成 xff0c 机器能直
  • 计算机中的速率、带宽、时延、利用率解读

    计算机网络的性能一般是指它的几个重要的性能指标 但除了这些重要的性能指标外 xff0c 还有一些非性能特征 xff08 nonperformance characteristics xff09 也对计算机网络的性能有很大的影响 那么 xff
  • 无人机原理

    文章目录 1基本运动2为何无人机螺旋桨多为偶数3机器人的运动控制4加速度计5陀螺仪6姿态角解算欧拉角的平面换算 1基本运动 为了平衡扭矩 xff0c 上图中1 3逆时针转动 xff0c 电机2 4顺时针转动进行反扭矩对消 上升 F1 61
  • 新浪微博PC端模拟登陆

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 图 xff1a Fantastic Beasts and Where to Find Them 投稿 星星在线 简介 一个从妹子图
  • win10下 docker build 报错 “Failed to fetch xxxxxxxx Temporary failure resolving 'archive.ubuntu.com'”

    错误信息 在docker中搭建禅道的时候执行docker build t zentao 命令后执行到apt get update amp amp apt get install指令的时候报错 xff0c 错误如下 xff1a W Faile
  • docker-ros-gui

    主机环境 系统 Ubuntu 16 04 1 安装docker 1 1 在线安装 物理机 默认使用当前最新版本 1 更新apt包索引 xff1a sudo apt get update 2 安装以下包以使apt可以通过HTTPS使用存储库