Docker可视化界面

Docker可视化界面

泡泡机器人SLAM与你一同成长

可视化

其实关键就是添加一个可视化的应用,如X11 apps (and GL), is the key for display inside the docker,e.g.

1
2
3
4
5
6
7
8
#!/bin/bash
# This file is covered by the LICENSE file in the root of this project.
docker build -t api --build-arg uid=$(id -g) --build-arg gid=$(id -g) .
docker run --privileged \
-ti --rm -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $1:/home/data/ \
api
1
docker run --privileged -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/amazinghao/Data:/home/data/ api
  • -e DISPLAY=$DISPLAY,after this the gui inside the docker will show in the host machine

  • --privileged,will make all extend equippment available for the docker

打开界面

有几种方式可以在Docker中设置界面,openbox,vnc等。这里选择的是ros-vnc来进行可视化界面的,vnc其实是一个功能, ubuntu自带的某些软件也有这个功能,VNC-Viewer免费版即可。 比如直接启动如下容器:

1
docker run -it -p 5900:5900 paopaorobot/ros-vnc

调整分辨率

1
docker run -it -p 5900:5900 -e RESOLUTION=1980x1200 paopaorobot/ros-vnc

通过ssh连接

打开本机控制台,输入:

1
docker run -it -p 2222:22 paopaorobot/ros-vnc

ssh -o 'UserKnownHostsFile=/dev/null' root@localhost -p [port] port表示端口号,保持和开启镜像时映射的端口一致。在控制台使用下述ssh链接打开的容器:ssh root@localhost -p 2222

也可以设置自定义的ssh密码,如asc123

1
docker run -it -p 2222:22 -e SSHPW=asc123 paopaorobot/ros-vnc

也可以随机选择端口号,P会系统自动给一个端口,可以避免端口冲突

1
docker run -it -P paopaorobot/ros-vnc

通过docker port查看当前开了哪些端口,然后找到想要的端口

同时使用ssh和可视化界面

1
2
docker run -it -p 5900:5900 -p 2222:22 paopaorobot/ros-vnc
docker run -itd -p 5900:5900 -e SSHPW=usmn9a -e RESOLUTION=1920x1280 -v /d/data:/data -p 2222:22 amazinghao/ubuntu:graph_slam_updated
  • -p 将本地5900端口映射到容器,服务于vnc进行可视化

  • -e SSHPW= 设置ssh连接的密码为xxx

  • -p 将本地2222端口映射到容器,服务于ssh进行连接

  • -e RESOLUTION=1920x1280 设置分辨率为1080p

  • -v 表示将本地D:/data路径挂在到容器对应的/data下,amazinghao/ubuntu:graph_slam_updated 为镜像名。

退出之后再打开

  • 按照前述方法用vnc或者ssh打开Docker的一个镜像并生成容器之后,通过exit退出当前容器,若是后续还想再进去,此时如果通过run命令就会再次产生一个容器,而你在之前的容器中所做的操作就不会保留。
  • 因此这时需要通过start,打开之前操作过现在状态是exit的容器,用attach建立连接,此时如果通过docker ps -a可以发现之前的容器又可以打开了,并且端口号是可用的。
  • 另外如果想要在exit容器时,容器不退出,应该使用exec命令打开镜像docker exec -it 24d1106f11b8 /bin/bash,此时也会发现容器时可用的了。

深度学习环境的界面可视化

在使用3D Gaussian Splatting进行场景重建时,有一个可视化界面需要使用,因此需要直接能够从Docker容器中打开,在容器初始化时需要做一些额外的配置,

1
docker run -itd --name=3dgs -e TZ="Asia/Shanghai"--shm-size=32g --gpus 'all,"capabilities=compute,utility,graphics"' --privileged=true -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -v /home/amazinghao/Data:/public -v /home/amazinghao:/workspace pytorch/pytorch:2.1.2-cuda12.1-cudnn8-devel /bin/bash
  • 既有了cuda支持,又有了可视化界面。

Docker远程Debug

首先代码是在本地,以文件夹挂载的方式挂载到容器中。

Python文件的Debug

这里借助的是vscode来实现代码Debug。首先通过Remote-Container/Remote-SSH插件连接到容器中,点击运行->打开配置,即如下类似的文件settings.json(位于本地.vscode路径下):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "main.py", # 主函数入口
"console": "integratedTerminal",
"justMyCode": true,
"args": [ //在这里写命令行的参数,如下
"--dataset", "ETH",
"--estimator", "4DOF",
"--topk", "6",
"--inlierd", "0.2",
"--tau_2", "0.5",
"--rr"
]
}
]
}

设置好之后可以F5开启调试了,打断点和单步调试都可以用。

C++的Debug

TODO

其他问题

vnc首次可以连接成功,但是再次连接时失败,打开vnc5900时提示,connected closed unxepectedly。

解决方案: 这是需要使用start将上次的docker容器打开就可以了,连接失败的原因可能是因为端口被占用了。

#
| visits
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×