docker-image配置ubuntu18.04+ROS-Melodic+opencv(python2)带显示界面运行环境(agx)

1、根据agx内核版本,拉取镜像(本次配置的为Jetpack4.5[L4T 32.5.0])
docker镜像ROS-Melodic网址
命令:docker pull 用户名/项目名:版本号

docker pull dustynv/ros:melodic-ros-base-l4t-r32.5.0

2、查看拉取的镜像:sudo docker images
用镜像生成容器:

sudo docker run -it \
--network host \
--runtime nvidia \
-e QT_X11_NO_MITSHM=1 \
--privileged=true \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
dustynv/ros:melodic-ros-base-l4t-r32.5.0 \
/bin/bash

查看生成的容器:sudo docker ps -a
开启容器:sudo docker start "容器ID"
进入容器:sudo docker attach "容器ID"
3、拷贝代码并安装相关依赖包
sudo docker cp “本地文件夹或者文件” 容器ID:“docker中的位置”
对于ROS-Melodic,默认使用python2,所以相关依赖包都使用pip安装。
pip install opencv-python 不可用时
可使用sudo apt-get install opencv-python
根据提示安装完相关依赖包,然后进行把配置好环境的容器保存为新的docker image。
4、生成docker image,并进行压缩移植
生成镜像:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -m="描述信息" -a="作者名字" "容器ID" "生成镜像的REPOSITORY:TAG"

-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

压缩镜像:

docker save -o “压缩镜像名字.tar” "镜像的REPOSITORY:TAG"

docker文件位于 /var/lib/docker
复制镜像文件:sudo cp “目录+压缩镜像名字.tar” "镜像ID"
5、把镜像移植到其它机器:docker load < “压缩镜像名字.tar”
生成容器:

sudo docker run -it \
--network host \
--runtime nvidia \
-e QT_X11_NO_MITSHM=1 \
--privileged=true \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
dustynv/ros:melodic-ros-base-l4t-r32.5.0 \
/bin/bash

进入容器,运行相关命令

6、代码运行中如果有调用显示界面,可能会出现“

QXcbConnection:Could not connect to display :0
Could not connect to any X display.

在启动容器前,在终端运行xhost +local:docker 赋权限即可
有可能在本机和docker终端都需要设置export DISPLAY=:0
可以用echo $DISPLAY查看下是否都为:0,不是则进行配置

你可能感兴趣的:(小知识总结,docker)