使用VNC可视化Docker容器

2023-05-16

使用VNC可视化Docker容器

  • 0. 前言
    • 环境:
  • 1. 容器端配置
    • 1.1 启动Docker容器
    • 1.2 安装x11
    • 1.3 安装桌面环境
    • 1.4 安装tightvncserver
  • 2. 配置VNC Server
    • 2.1. 首先停止刚刚新建的虚拟化桌面
    • 2.2 修改xstartup文件
    • 2.3 启动新的虚拟化桌面
  • 3. 本地安装VNC Viewer
  • 4. 遇到的问题
    • 4.1 终端无法启动
    • 4.2 浏览器无法启动
    • 4.3 浏览器中显示的中文为乱码

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即可

参考链接:Failed to execute default web browser. input/output error

4.3 浏览器中显示的中文为乱码

  1. 安装locales并配置
    apt install locales
    dpkg-reconfigure locales
    
  2. 语言编码选择 en_US.UTF8,zh_CN GB2312,zh_CN GBK GBK,zh_CN UTF-8 UTF-8
  3. 为当前用户配置默认语言为中文zh_CN UTF-8 UTF-8,在~/.bashrc最后添加一行
    export LANG=zh_CN.UTF-8
    vim ~/.bashrc
    
    添加即可
    export LANG=zh_CN.UTF-8
    
  4. 安装中文字体
    apt install fonts-wqy-zenhei
    
    重新启动即可
    参考链接: xfce4 设置中文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VNC可视化Docker容器 的相关文章

  • 串口调试助手VC源程序及详细编程过程

    串口调试助手VC源程序 及编程详细过程 作者 xff1a 龚建伟 可以任意转载 xff0c 注明作者和说明来自 龚建伟技术主页 目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSCom
  • linux 下 pytorch 安装

    我的显卡是gtx 730M 已经安装linux版本的驱动 xff0c 安装环境centos8 xff0c 内核版本Linux localhost localdomain 4 18 0 305 19 1 el8 4 x86 64 1 xff0
  • 章文嵩:怎样做开源才有意义?

    转至 xff1a http www infoq com cn interviews how to make open source meaningful utm campaign 61 infoq content amp utm sourc
  • seL4 构建和测试

    转载至 xff1a https source2014 hackpad com seL4 IJItb9IDncR 取得核心程式碼 預先設定好 Toolchain http sel4 systems Download DebianToolCha
  • [小技巧] ping 的时间间隔

    ping 可以选择间隔一段时间的间隔值 使用 i 命令 参考 xff1a 隔一秒钟ping一次 ping i 1 127 0 0 1 PING 127 0 0 1 127 0 0 1 56 84 bytes of data 64 bytes
  • [R语言] quantmod 包获取国内的股票数据

    2016 05 09追加 xff1a 对应的quantmod包相关说明参考 http www quantmod com quantmod 包默认是访问 yahoo finance 的数据 xff0c 其中包括上证和深证的股票数据 xff0c
  • 文件名日文乱码处理

    文件名出现日文乱码的话可以用如下命令解决 xff1a convmv r t utf 8 notest path to dir 另外 xff0c 压缩的 zip 解压时使用如下命令 xff1a unzip Ocp932 path to zip
  • can 总线介绍

    CAN xff0c 全称为 CONtroller Area Network xff0c 即控制器局域网 xff0c 是国际上应用最广泛的现场总线之一 最初 xff0c CAN被设计作为汽车环境中的微控制器通讯 xff0c 在车载各电子控制装
  • python 的 do ~ while 语法

    本文摘至 http ama ch hatenablog com entry 20080425 1209110237 Python不支持do while语法 while xff08 无限循环 xff09 和break组合起来替换 do whi
  • 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究

    本文转载至 xff1a http www cnblogs com littlehann p 3700357 html 目录 1 802 11标准简介 2 802 11协议格式 3 Wi Fi认证过程 4 802 11标准中的数据安全加密协议
  • Make 命令教程

    转载至 xff1a http www ruanyifeng com blog 2015 02 make html 作者 xff1a 阮一峰 日期 xff1a 2015年2月20日 代码变成可执行文件 xff0c 叫做编译 xff08 com
  • Python中用于计算对数的log()方法

    本文转载至 xff1a http www jb51 net article 66130 htm 这篇文章主要介绍了Python中用于计算对数的log 方法 是Python入门基础中的必会的方法 需要的朋友可以参考下 log 方法返回x的自然
  • RT-Thread创始人熊谱翔: 我和Linux、嵌入式实时操作系统RT-Thread

    本文转载至 xff1a http www rt thread org dynamic 78 html 接触 Linux 说起 Linux应该从我在校园时期说起 我是在山城 重庆邮电学院念的书 xff0c 1998年时宿舍伙伴一起凑的钱买的电
  • 到底什么是Unikernel?

    本文转载至 xff1a http dockone io article 855 utm source 61 tuicool amp utm medium 61 referral 编者的话 本文介绍了一种新的应用虚拟化技术 xff0c 它让应
  • xauth: “timeout in locking authority file /home/<user>/.Xauthority”?

    本文转载至 xff1a http unix stackexchange com questions 215558 why am i getting this message from xauth timeout in locking aut
  • 小技巧:检查你本地及公共 IP 地址

    本文转载至 xff1a https linux cn article 8207 1 html utm source 61 rss amp utm medium 61 rss 你本地的 IP 地址 xff1a 192 168 1 100 上面
  • Inside Real-Time Linux

    本文转载于 xff1a https www linux com news event elce 2017 2 inside real time linux Real time Linux has come a long way in the
  • [小技巧] vim中使用cscope时不区别大小写

    cscope 有 C 这么一个选项 C Ignore letter case when searching vim 里使用 cscope 不区别大小写可以使用下面一个技巧 xff1a set csprg 61 usr bin ra csco
  • PWM占空比和电机转速有什么线性关系

    可以看电机拖动一书 xff0c 里面讲了电机的建模 由于PWM波频率很高 xff0c 一般认为接在电机两端的电压平均值有如下关系 xff1a 假如占空比为a xff0c 驱动板供电电压为U xff0c 则电机两端电压Ud 61 a U 对于
  • SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1 尺度空间极值检测 Scale space extrema detection 1 1 尺度空间和极值1 2 DoG和LoG的关系1 3 构建高斯尺度差分空间Tips 2 极值点定位 Keypoint

随机推荐