0. 前言
VNC是虚拟网络控制台(Virtual Network Console)的缩写,是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美,但是由于VNC协议自身的限制,无法提供文件上传下载的能力。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver 和 vncviewer。
VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。在任何安装了客户端的应用程序(vncviewer)的计算机(Windows, linux均可)上都能方便地和安装了服务器端应用程序(vncserver)的计算机相互连接。vncserver
可以在服务器端生成一个虚拟的桌面环境,连接成功后就可以在本地屏幕上显示。
所以我们的整体思路,就是在docker容器中安装vnc-server
和一个桌面软件,然后在本地机器安装vnc-viewer
;在docker容器中启动vnc-server
服务,就可以在本地Windows中用vnc-viewer
指定ip和端口来连接docker容器,从而可视化容器的UI操作界面。
环境:
远程服务器:
- Docker版本:
20.10.18
- 使用的镜像:
pytorch/pytorch 1.11.0-cuda11.3-cudnn8-runtime
本地机器环境
- Windows11
1. 容器端配置
1.1 启动Docker容器
sudo docker run -itd --gpus all --name CONTAINER-NAME --restart unless-stopped -e USER=root -v /local/directorty:/workspace -v /dev/shm:/dev/shm -p xxxx:5901 pytorch/pytorch:1.11.0-cuda11.3-cudnn8-runtime
命令中的名字、目录等替换成自己的,-e USER=root
、-v /dev/shm:/dev/shm
、-p xxxx:5901
不要改,-e USER=root
是后续容器中启动vncserver
所需的环境变量,5901
端口是vncserver启动时默认使用的端口,-v /dev/shm:/dev/shm
保证容器的内存不会不够。
启动成功后进入容器:
sudo docker exec --it CONTAINER-NAME bash
1.2 安装x11
x11是一个用于远程图形界面的程序,若只安装x11,也可以通过ssh -x连接后显示图形程序。
apt-get install xorg openbox
1.3 安装桌面环境
本示例中,桌面环境使用Xfce
,它是一个精简的轻量化桌面,与Gnome和KDE相比更小巧,并且界面美观、对用户友好,适合云服务器远程连接场景下使用。其他的桌面环境还有ubuntu-desktop
等。
更新软件列表
apt update
安装Xfce
桌面环境,顺便装个vim
,方便后续文件编辑
sudo apt install xfce4 xfce4-goodies vim
1.4 安装tightvncserver
apt install tightvncserver
执行完成后,输入vncserver
命令进行配置:
- 密码:输入一个6-8位的密码,后续用VNC viewer连接会用
- 是否创建仅查看密码:使用仅查看密码登录的用户将无法使用鼠标或键盘控制云服务器。此处输入“n”
2. 配置VNC Server
2.1. 首先停止刚刚新建的虚拟化桌面
上一步输入vncserver
时创建了一个新的虚拟化桌面
输入以下命令先删除它
vncserver -kill :1
2.2 修改xstartup文件
修改xstartup
文件
vim ~/.vnc/xstartup
按i
进入编辑模式,添加以下内容之后保存并退出
#!/bin/sh
xrdb $HOME/.Xresources
startxfce4 &
这里我的配置文件里只少最后一行,所以只添加最后一行即可。
其中,
- 第一个命令
xrdb $HOME/.Xresources
告诉VNC的GUI框架读取服务器用户的.Xresources
文件。用户可以在.Xresources
中更改图形桌面的某项设置,如终端颜色、光标主题和字体渲染。 - 第二个命令
startxfce4 &
告诉系统启动Xfce。
为了保证VNC服务正常启动,需要配置xstartup
为可执行文件。
chmod +x ~/.vnc/xstartup
2.3 启动新的虚拟化桌面
vncserver -geometry 1280x960
-geometry
参数用来设置分辨率,vncserver --help
可以查看更多参数
回显信息中出现类似这样的一条信息:Log file is /root/.vnc/xxx:1.log。其中,“1”表示当前用户分配的是VNC的第一个虚拟桌面。
3. 本地安装VNC Viewer
VNC Viewer在Windows, Linux中都有相应的安装包。 我的本地机器使用的Win11系统,直接下载安装包安装即可。
VNC Viewer下载地址: https://www.realvnc.com/en/connect/download/viewer
安装完成后,启动VNC Viewer,在上方输入框中输入ip:端口号
并确定,弹出的警告窗口选择Continue
,然后密码即为1.4中创建的密码。
连接成功后的界面:
4. 遇到的问题
4.1 终端无法启动
在桌面点击终端图标启动终端报错:
Failed to execute default terminal. Emulator. input/output error
在docker容器的命令行中输入下面命令
sudo apt-get install xfce4-terminal
sudo update-alternatives --config x-terminal-emulator
按照输出的提示选择xfce4-terminal.
参考链接:Getting input/output error running anything on remote desktop
4.2 浏览器无法启动
Failed to execute default web browser. input/output error
解决办法:安装一个Chrome
浏览器并设置为默认
安装wget
apt install wget
下载Chrome
安装包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
安装Chrome
apt install ./google-chrome-stable_current_amd64.deb
设置为默认浏览器,打开终端输入
xfce4-settings-manager
选择"Preferred Applications"
找到 Web Browser
,然后选择Other...
,选择Google-Chrome
或者输入/usr/bin/google-chrome
即可文章来源:https://www.toymoban.com/news/detail-805269.html
参考链接:Failed to execute default web browser. input/output error文章来源地址https://www.toymoban.com/news/detail-805269.html
4.3 浏览器中显示的中文为乱码
- 安装locales并配置
apt install locales dpkg-reconfigure locales
- 语言编码选择 en_US.UTF8,zh_CN GB2312,zh_CN GBK GBK,zh_CN UTF-8 UTF-8
- 为当前用户配置默认语言为中文zh_CN UTF-8 UTF-8,在
~/.bashrc
最后添加一行export LANG=zh_CN.UTF-8
添加即可vim ~/.bashrc
export LANG=zh_CN.UTF-8
- 安装中文字体
重新启动即可apt install fonts-wqy-zenhei
参考链接: xfce4 设置中文
到了这里,关于使用VNC可视化Docker容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!