当前位置: 首页 > article >正文

Manus 技术探索 - 使用 gVisor 在沙箱内运行 Ubuntu 容器并通过远程浏览器访问

在容器化技术中,gVisor 为运行不信任的工作负载提供了额外的安全隔离。本文将详细介绍如何利用 gVisor 运行带 GUI 的 Ubuntu 容器,并通过 VNC/NoVNC 实现远程浏览器访问,从而轻松控制容器内的桌面环境。

1. 安装 gVisor

如果你还没有安装 gVisor,请先执行以下步骤进行安装,并将其配置为 Docker 的运行时。

下载并安装 runsc

curl -Lo runsc https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/runsc
chmod +x runsc
sudo mv runsc /usr/local/bin/

配置 Docker 使用 gVisor 运行时

创建或更新 Docker 的配置文件 /etc/docker/daemon.json,添加 gVisor 运行时配置:

sudo cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "runtimes": {
    "runsc": {
      "path": "/usr/local/bin/runsc"
    }
  }
}
EOF

完成配置后,重启 Docker 服务以使配置生效:

sudo systemctl restart docker

2. 启动 Ubuntu 容器并安装 VNC 服务器

接下来,我们将启动一个 Ubuntu 容器,并使用 gVisor 的沙箱运行它:

docker run -d -it --runtime=runsc --name ubuntu-vnc -p 5901:5901 -e USER=root ubuntu bash

进入容器后,更新软件包并安装 XFCE 桌面环境和 VNC 服务器(以 tightvncserver 为例):

apt update && apt install -y xfce4 xfce4-goodies tightvncserver

3. 配置 VNC 服务器

3.1 初始化 VNC 服务器

在首次运行 VNC 服务器时,会提示你设置 VNC 密码。执行以下命令启动服务器:

vncserver

设置完成后,可以通过以下命令停止当前的 VNC 会话(例如,停止 :1 号会话):

vncserver -kill :1

3.2 配置启动脚本以加载 XFCE 桌面

编辑 ~/.vnc/xstartup 文件,内容如下:

echo "#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &" > ~/.vnc/xstartup

确保启动脚本具有可执行权限:

chmod +x ~/.vnc/xstartup

3.3 启动 VNC 服务器

通过以下命令重新启动 VNC 服务器,并指定屏幕分辨率(例如 1280x720):

vncserver -geometry 1280x720

此时,VNC 服务器默认在端口 5901 上运行。

4. 在宿主机安装并配置 NoVNC

为了通过浏览器访问容器内的桌面环境,我们可以使用 NoVNC。首先,在宿主机上安装 NoVNC:

sudo apt install -y novnc

启动 NoVNC 服务,将其绑定到 6080 端口,并连接到本地的 VNC 服务:

novnc_server --vnc localhost:5901 --listen 6080

5. 通过远程浏览器访问 Ubuntu 桌面

在浏览器地址栏中输入以下 URL,将 <服务器IP> 替换为实际的服务器 IP 地址:

http://<服务器IP>:6080/vnc.html

输入之前设置的 VNC 密码后,即可通过浏览器远程控制运行在 gVisor 沙箱内的 Ubuntu 桌面。

6. 让 VNC 服务器随容器启动

如果希望 VNC 服务器在容器启动时自动运行,可以在 docker run 命令中通过传递启动命令实现:

docker run -d --runtime=runsc --name ubuntu-vnc -p 6080:6080 ubuntu bash -c "vncserver && novnc_server --vnc localhost:5901 --listen 6080"

这样,每次容器启动时,VNC 服务和 NoVNC 网页访问服务都会自动启动,简化后续操作。

7. 总结

本文介绍了如何利用 gVisor 沙箱技术运行带 GUI 的 Ubuntu 容器,并通过 VNC/NoVNC 实现远程浏览器访问。主要步骤包括:

  1. 安装并配置 gVisor:下载 runsc,配置 Docker 使用 gVisor 作为运行时,并重启 Docker。
  2. 运行 Ubuntu 容器并安装 VNC 服务:启动容器,更新软件包,安装 XFCE 桌面环境和 tightvncserver。
  3. 配置 VNC 服务器:初始化 VNC 服务,设置启动脚本以加载 XFCE 桌面,并启动 VNC 服务器。
  4. 安装并启动 NoVNC:在宿主机上安装 NoVNC,并配置其连接到 VNC 服务。
  5. 通过浏览器访问桌面:利用浏览器远程访问容器内的 Ubuntu 桌面。
  6. 自动化启动:通过适当的 docker run 命令实现容器启动时自动运行 VNC 和 NoVNC 服务。

通过以上步骤,你可以在确保安全隔离的前提下,实现对容器内桌面环境的远程访问,极大地方便了开发、测试和远程运维工作。希望这篇教程对你有所帮助,快试试吧!🚀



http://www.kler.cn/a/588835.html

相关文章:

  • 电子电气架构 --- 智能座舱和车载基础软件简介
  • SEO新手基础优化三步法
  • 向量数据库技术系列五-Weaviate介绍
  • (一)微服务初见之 Spring Cloud 介绍
  • ChatPromptTemplate的使用
  • 将分支`XXX`合并到远程分支`master
  • MySQL 数据库备份
  • 使用 Docker 部署前端项目全攻略
  • 【操作系统安全】任务2:用户与用户组
  • 基于小参数量大语言模型(Small Language Models) ---- 在制造业落地降本增效应用:可行性研究初探
  • LinuX---Shell---变量
  • 2025-03-13 学习记录--C/C++-PTA 练习2-14 求奇数分之一序列前N项和
  • STM32上实现简化版的AUTOSAR DEM模块
  • C++:类和对象(从底层编译开始)详解[前篇]
  • CF 230B. T-primes
  • zend server试用分析
  • C++程序设计语言笔记——抽象机制:运算符重载
  • 电机控制常见面试问题(十)
  • SpringBoot入门-(1) Maven【概念+流程】
  • 【设计模式】通过访问者模式实现分离算法与对象结构