x11docker:让你的Docker运行图形程序

概述x11docker是什么?x11docker是一款允许在Docker容器中运行图形应APP的软件。和虚拟机一样Docker允许在隔离的容器环境中运行应用程序

大家好,如果您还对x11docker:让你的Docker运行图形程序不太了解,没有关系,今天就由本站为大家分享x11docker:让你的Docker运行图形程序的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

此外,x11docker 还为Docker 提供了安全增强功能,

软件可以安装在可部署的Docker镜像中,可以运行或部署因依赖问题而难以在多个系统上安装的软件,并且可以在主机和容器之间共享要处理的文件。

x11docker主要运行在Linux上,基于Windows WSL子系统支持在Windows上运行(部分功能受到限制)。请注意,x11docker 尚不支持macOS。

主要特点

着重关注安全性:

通过运行额外的X 服务器来避免X 安全漏洞。

将容器功能限制到最低限度。

容器用户与主机用户相同,避免容器的root用户。

低依赖性:

系统仅依赖一台X服务器和Docker,没有其他依赖项目。

除了一些可选功能之外,Docker 镜像中没有任何依赖项。

使用SSH,VNC或HTML5进行远程管理。

使用方便快捷,比如:

x11docker 杰斯/阴极

x11docker –desktop –size 320×240 x11docker/lxde(需要嵌套X 服务器Xephyr)

除了以上功能外,

可选功能:

还提供了大量可选的功能扩展:

持久共享主机文件夹和持久主目录。

基于Pulseaudio 和ALSA 声音功能。

基于OpenGL 的硬件加速。

剪贴板共享。

通过CUPS 支持打印机。

网络摄像头支持。

本地化语言设置。

韦兰支持。

支持容器中的引导系统DBus和init,包括tini、runit、OpenRC、SysVinit和systemd。还支持Elogind。

安装使用

的安装很简单,只需运行x11docker shell脚本即可开始安装。

安装选项

作为root,x11docker 可以在系统上安装、更新和删除:

x11docker –install : 在当前目录中安装x11docker 和x11docker-gui。

x11docker –update : 从github 下载并安装最新版本。

x11docker –update-master : 从github 下载并安装最新的主版本。

x11docker –remove : 删除x11docker 安装的所有文件。

一键安装

只需运行以下命令。如果不使用sudo,只需删除sudo部分即可。

最小化安装

一般建议同时运行bash x11docker 和bash x11docker-gui。但是,也支持最小安装。对于最小安装,首先使用chmod + x x11docker 赋予其执行权限。然后将其mv 到/usr/bin。除了x11docker 脚本本身之外,不需要其他文件。

x11docker图形界面

x11docker-gui 是x11docker 的可选图形前端。它也是从控制台运行的。 x11docker-gui 依赖于kaptain 软件包。可以通过各个发行版的包管理工具来安装。如果系统上未安装kaptain,x11docker-gui 将使用x11docker/kaptain 映像。

终端命令行使用

x11docker还支持在终端命令行下使用。使用方法为:x11docker IMAGENAME [COMMAND]。通过–help可以列出使用方法和选项。

对于图形桌面环境,添加选项-d, –desk

要在没有X 的情况下运行,请使用选项-t、–tty

使用选项-i, –interactive 启动交互式TTY。

运行语法

要使用新的X 服务器运行Docker 映像:

x11docker [选项] 图像[命令]

x11docker [选项] — 图像[命令[ARG1 ARG2 .]]

x11docker [选项] — DOCKER_RUN_OPTIONS — 图像[命令[ARG1 ARG2 .]]

要在新的X 服务器上运行主机应用程序:

x11docker [选项] –exe 命令

x11docker [选项] –exe — 命令[ARG1 ARG2 .]

运行一个新的空X 服务器:

x11docker [OPTIONS] –xonly 请注意,DOCKER_RUN_OPTIONS 只是添加到docker run 命令中,而没有进行x11docker 检查。

选项设置

X服务器选项

如果没有特别指定X 服务器选项,x11docker 将根据安装的依赖项和执行的选项自动从–desktop、–gpu 和–wayland 中选择一项。

在X 中使用选项–xorg 的提示。

使用选项-t, –tty 在没有X 的情况下运行。

桌面或无缝模式

x11docker 默认情况下以无缝模式运行单个应用程序,即常规桌面上的单个窗口。如果要在映像中运行桌面环境,请添加选项–desktop。

选项–xpra 和–nxagent 支持无缝模式。还支持非安全选项–hostdisplay。

如果未安装xpra 和nxagent,并且x11docker 找到桌面X 服务器(例如Xephyr),它将尝试避免使用不安全选项–hostdisplay 并使用主机窗口管理器运行Xephyr。

可以使用选项–wm=WINDOWMANAGER 指定主机窗口管理器,例如–wm=openbox。

除了–hostdisplay 之外的所有X 服务器选项都支持带有–desktop 的桌面模式。

容器中的共享文件夹和HOME

Docker 被删除后,其运行系统中的所有更改都将丢失。对于持久数据存储,需要与主机共享目录:

选项-m, –home:在~/.local/share/x11docker/IMAGENAMEE 中创建一个主机目录,该目录与容器共享并挂载为其HOME 目录。容器主目录中的文件和配置更改将保持不变。 x11docker 创建从~/.local/share/x11docker 到~/x11docker 的软链接。

选项–sharedir DIR 将主机目录安装在容器中的同一位置。 –sharedir DIR:ro 限制只读访问。

选项–homedir DIR 与–home 类似,但允许指定用于数据存储的主机目录。

x11docker:让你的Docker运行图形程序

$HOME 的特殊情况:

硬件加速

使用选项-g、–gpu 实现OpenGL 的硬件加速。

在大多数情况下,当在主机上使用开源驱动程序时,此功能是开箱即用的。

闭源NVIDIA 驱动程序需要一些设置,并且支持较少的x11docker X 服务器选项。

剪贴板

可以使用选项-c、–clipboard 实现剪贴板共享。

可以使用–xpra 和–hostdisplay 来完成图像剪辑。

某些X 服务器选项需要依赖于主机上的xclip 包。

声音

选项-p、–pulaudio 和–alsa 可以共享声音。

对于–pulseaudio 声音,主机和图像中需要使用pulseaudio。

对于–alsa的ALSA声音,可能需要指定声卡,例如:–alsa=Generic。可以使用-l 获取可用声卡的列表。为了支持像dmix 这样的虚拟ALSA 设备,镜像需要依赖ALSA 库,例如debian 镜像中的libasound2。

摄像头

主机上的网络摄像头可以通过选项–webcam 共享。

如果镜像中的网络摄像头应用程序失败,则需要在镜像中安装mesa-utils (debian) 或mesa-demos (arch)。

guvcview 需要–pulseaudio 或–alsa。

chees 和gnome-ring 需要–init=systemd 或–dbus-system。

打印机

打印机通过选件打印机与主机打印机共享。

主机上需要CUPS,大多数Linux 默认支持CUPS 打印机服务器。

容器需要依赖libcups2 (debian) 或libcups (arch) 包。

本地化语言

x11docker本地化语言设置,提供特殊选项–lang。

–lang 不带参数将容器中的LANG 设置为与主机上的LANG 相同。与–lang=$LANG 相同

如果所需的区域设置已存在于映像中并已启用,x11docker 将检查容器并启动它。

如果x11docker 找不到相应区域设置的设置,它将在容器启动时创建它。例如:

–lang=de 代表德语,–lang=zh_CN 代表中文,–lang=ru 代表俄语,–lang=$LANG 代表与您的主机服务相同的语言环境。

为了支持中文、日文、韩文等东亚文字,需要在镜像中安装类似的字体,例如fonts-arphic-uming。

Wayland

要运行Wayland 而不是X 服务器,x11docker 提供了选项–wayland、–weston、–kwin 和–hostwayland。

选项–wayland 自动设置Wayland 环境和一些相关的环境变量。

选项–kwin 和–weston 运行Wayland 合成器kwin_wayland 或weston。

如果未指定此选项,–wayland 将添加选项–dbus 和–env QT_QPA_PLATFORM=wayland。

选项–hostwayland 可以在主机Wayland 桌面上运行单独的应用程序,例如Gnome 3、KDE 5 和Sway。例如:Wayland 上的xfce4-terminal:

x11docker –wayland x11docker/xfce xfce4-termina

启动系统

x11docker 通过选项–init 在容器中支持多个引导系统作为PID 1。在容器中启动解决了Docker僵尸进程回收的问题。默认情况下它使用/usr/bin/docker-init中的tini。还支持Tini、systemd、SysVinit、runit、OpenRC 和elogind。

DBus

某些桌面环境和应用程序需要运行DBus 守护程序和DBus 用户会话。使用–dbus 运行DBus 用户会话守护进程。使用–dbus-system 运行DBus 系统守护进程。

如果启动失败或需要大约90 秒,请安装init 系统并使用它来运行DBus。例如。在映像中安装systemd 并使用–init=systemd 运行。

使用–hostdbus 连接到主机DBus 用户会话。

使用–sharedir/run/dbus/system_bus_socket 共享主机DBus 系统套接字。

DBus 使用init 系统systemd、openrc、runit 和sysvinit(选项–init)自动启动。

依赖

x11docker 可以使用标准系统实用程序运行,无需额外依赖于主机或映像。作为核心程序,只需要一台X服务器,Docker容器运行在X上。x11docker在启动时检查所选选项的依赖关系并显示终端消息。

在主机上安装xpra Xephyr weston Xwayland xdotool xauth xclip xrandr xdpyinfo,或保持原样。

X服务器依赖

x服务器上的依赖包详细信息请参见下表:

请注意,只有选项–hostdisplay 和–xorg 支持使用专有NVIDIA 驱动程序的-gpu。

功能选项依赖

各附加功能的依赖关系详细如下表:

安全

x11docker 的范围是运行容器化GUI 应用程序,同时保留和改进容器隔离。主要的安全改进包括:

单独的X服务器

x11docker 通过运行单独的X 服务器来避免X 安全漏洞。

一般的解决方案是与X套接字:0共享监视器的主机,但这打破了容器的隔离,允许键盘记录和远程主机控制。 (为了兼容x11docker,还为此解决方案提供了不太安全的支持。选项是–hostdisplay)。

使用MIT-MAGIC-COOKIE 进行身份验证,与文件~/.Xauthority 分开存储。

容器用户系统

x11docker 创建一个与主机用户类似的容器用户,以避免容器中存在root 用户。

您可以使用–user=USERID 指定另一个用户,或使用–user=UID:GID 指定不存在的用户。

禁用可能的root 密码并删除/etc/sudoers 中的条目。

如果要在容器中使用root 权限,请使用选项–sudouser,该选项在x11docker 中使用su 和sudo 密码。您还可以使用–user=root 运行。

o如果要使用映像中指定的USER,请设置选项–user=RETAIN。在这种情况下,x11docker不会更改etc/passwd或/etc/sudoers。选项- 主页将不可用。

将容器权限降至最低

设置docker 运行选项–cap-drop=ALL –security-opt=no-new-privileges。

可以使用x11docker 选项–cap-default 禁用此限制,或使用–sudouser 减少此限制。

容器隔离降低选项

如果所选选项降低容器隔离,x11docker 将在终端中显示警告消息。请注意,x11docker 不会检查自定义DOCKER_RUN_OPTIONS。

最重要的是:

–hostdisplay 共享显示的主机X 套接字:0,而不是运行第二个X 服务器。

x11docker:让你的Docker运行图形程序

提供所谓的不受信任的cookie 可以降低滥用的风险,但不要依赖于此。

如果另外使用–gpu 或–clipboard,则会启用选项–hostipc 和可信cookie,并且不会保留针对X 安全漏洞的保护。

如果你不关心容器隔离,x11docker –hostdisplay。

–gpu 允许访问GPU 硬件。这可以被滥用从主机获取窗口内容(palinopsia bug)并启用GPU rootkit。

–pulseaudio 和–alsa 允许捕获来自主机的音频输出和麦克风输入。

还有一些非常特殊的选项会降低安全性,但不需要经常使用:

–sudouser 允许通过x11dockerfor 容器使用su 和sudo。如果应用程序以某种方式突破容器,则可能会损害主机系统。

–cap-default 禁用x11docker 的容器安全强化并回退到默认的Docker 容器功能。

– dbus-system, –init=systemd|sysvinit|openrc|runit 允许x11docker 删除的某些容器功能。

–init=systemd 还共享对/sys/fs/cgroup 的访问。某些进程将在容器中以root 身份运行。

–hostipc 设置docker 运行选项–ipc=host。 (允许MIT-SHM/共享内存。禁用IPC 命名空间。)

–hostnet 设置docker 运行选项–net=host。 (共享主机网络堆栈。网络命名空间已禁用。容器可以监控网络流量。)

可能风险点:

对于x11docker 容器,通过使用docker run 选项–security-opt label=type:container_runtime_t 降级可能的SELinux 限制,以允许访问新的X unix 套接字。

禁用用户命名空间重新映射以允许选项–home 和–homedir 而不会出现文件所有权问题。例外:用户名称空间重新映射未使用–user=RETAIN 禁用。

x11docker 提供了几种不同的X 服务器选项。涉及的每个X 服务器可能都有自己的漏洞。 x11docker 仅涵盖由X11 协议产生的众所周知的X 安全漏洞。

沙盒系统

x11docker 通过增强docker的容器隔离以及允许将容器用作沙箱,可以很好地保护主机系统免受恶意软件攻击或软件故障引起的问题。一方面,沙箱可以用来在安全的隔离环境中运行软件,也可以用作:

运行因依赖问题而难以在主机上安装的软件的兼容环境。

开发环境,用于收集库、编译器等,以保持主机干净。

减轻意外/错误行为造成的损害的开发环境。

软件安全层,在最坏的情况下,会运行一些潜在的恶意软件。例如,启用了Javascript 的Internet 浏览器或带有Windows 应用程序的wine。

x11docker 的进程功能有限。还可以通过选项–limit 限制对CPU 和RAM 的访问。默认情况下–limit 限制为可用CPU 的50% 和当前可用RAM 的50%。可以使用–limit=FACTOR 指定另一个金额,其中FACTOR 大于零且小于或等于1。

注意:默认情况下允许Internet 访问。可以使用–no-internet 禁用网络。

MS Windows下运行

x11docker 通过MSYS2、Cygwin 和WSL 在MS Windows 上运行。虽然可以支持大部分功能,但由于系统限制,Linux上可用的部分功能并不能保证在Windows下可靠:

在Windows 上,将X 服务器VcXsrv 安装到C/Program Files/VcXsrv(选项–vcxsrv)。

替代方案:Cygwin 提供X 服务器Xwin(选项–xwin)。在Cygwin 中安装xinit 软件包。只能在Cygwin 中使用。

对于声音选项–pulseaudio,请在C:/cygwin64 中安装Cygwin 和pulseaudio 软件包。它还适用于MSYS2 和WSL。

诸如“./x11docker: line 2:\r’: command not find”之类的错误消息表示由不同换行系统引起的错误,需要运行dos2unix x11docker

并非所有x11docker 选项都在MS Windows 上实现。例如。 –webcam 和–printer 没有效果。

Windows 中的防火墙设置可能会导致容器应用程序访问X 服务器出现问题。

故障排除

要排除故障,请在终端中运行x11docker 或x11docker-gui。

如果某些内容不安全、丢失或错误,x11docker 会显示警告。

使用选项-v、–verbose 查看完整的日志文件输出。

选项-D、–debug 提供较少详细的输出。

最新的日志文件可以在~/.cache/x11docker/x11docker.log中找到。

某些应用程序因后备选项–hostdisplay 而失败。添加–clipboard 以禁用某些安全限制。如果这不能解决问题,请安装不同的X 服务器。

确保x11docker 版本与x11docker –update (最新版本)或x11docker –update-master (最新版本)同步。

图像可能具有用户规范并且是为该用户设计的。 x11docker 设置容器用户,可能与用户设置不匹配。

使用docker inform -format ‘{{.Config.User}}’IMAGENAME 检查镜像中的USER 规范。

如果是这样,请尝试使用–user=RETAIN 指定要在映像中运行的USER。

某些应用程序需要的权限或功能比x11docker 默认提供的更多。

减少容器隔离,例如:

x11docker 选项:–cap-default –hostipc –hostnet –sys-admin。

docker 运行选项: –cap-add ALL –security-opt seccomp=unconfined –privileged

示例:x11docker –cap-default –hostipc –hostnet –sys-admin – –cap-add ALL –security-opt seccomp=unconfined –privileged – IMAGENAME

尝试减少容器隔离。如果有效,请一一删除选项,直到留下您想要的选项。

如果–cap-add ALL 解决了问题,则找到您真正需要的功能并仅添加该功能。

不要使用–privileged 作为解决方案。允许对主机进行过多访问可能会严重破坏容器隔离。调查容器确实需要哪些权限。

容器应用程序可以使用–user=root 以root 身份运行。

某些应用程序需要DBus。在映像中安装dbus 并尝试选项–dbus。如果这不起作用,您可以尝试选项–dbus-system。

某些应用程序需要systemd。在映像中安装systemd 并尝试选项–init=systemd。

实例展示

x11docker的一些示例如下表所示,其中列出了一些通过x11docker运行的接口程序。所有实例镜像都可以在docker hub 上找到。

应用程序

桌面环境

按需定制镜像

系统镜像将持续更新,调整您的Dockerfile 并重建。您可以自定义添加一些应用程序到x11docker 示例映像并为它们创建新的Dockerfile。例如:

# 带有VLC 媒体播放器的xfce 桌面

来自x11docker/xfce

运行apt-get update apt-get install -y vlc

系统截图

最后为读者展示一些x11docker运行的截图:

x11docker –桌面x11docker/lxqt

深度桌面

x11docker –desktop –gpu –systemd –pulseaudio x11docker/deepin

3D等离子

x11docker –desktop –gpu x11docker/plasma

用户评论

x11docker:让你的Docker运行图形程序
你是梦遥不可及

简直绝了!我一直想在Docker里运行一些需要GUI的应用,现在终于有了办法!以前总是遇到各种兼容性和部署问题,这下轻松省心多了。谢谢开发者!

    有19位网友表示赞同!

x11docker:让你的Docker运行图形程序
心安i

这个X11docker太棒了!让我可以用docker跑那些依赖图形界面软件的项目,简直是开发者的福音啊!之前要来回切换环境真的很麻烦。现在直接在容器里操作更方便快捷。

    有17位网友表示赞同!

x11docker:让你的Docker运行图形程序
来瓶年的冰泉

很有意思,一直在用docker运行脚本和服务程序,却不知道可以用它来 запуска graphical applications。这种功能对于一些特定的科研工具或软件来说非常有用,希望能看到更多详细的使用教程!

    有20位网友表示赞同!

x11docker:让你的Docker运行图形程序
哽咽

我最近学习Docker,感觉X11docker这个技术很有潜力。特别是对于那些需要交互界面、虚拟环境测试的应用来说,它能够提供一个更便捷的操作解决方案。

    有5位网友表示赞同!

x11docker:让你的Docker运行图形程序
余温散尽ぺ

标题有点误导人啊,我以为是让你直接在docker容器里面实现图形化的操作界面,没想到还是依赖到本地X11服务器?有些失落。希望将来能够支持更独立的图形渲染库!

    有12位网友表示赞同!

x11docker:让你的Docker运行图形程序
沐晴つ

对于一些需要图形交互的环境搭建来说,X11docker可能并不适合所有场景。比如对性能要求极高的应用,或者需要高分辨率屏幕的情况,直接在本地运行或许更好。

    有17位网友表示赞同!

x11docker:让你的Docker运行图形程序
鹿先森,教魔方

这个技术听起来很方便,但我有点担心安全性问题。毕竟X11可以访问整个系统资源,如果Docker容器被攻击… 还是需要慎重考虑安全防护措施!

    有8位网友表示赞同!

x11docker:让你的Docker运行图形程序
矜暮

我已经试过了,感觉用X11docker运行图形程序还是很流畅的,而且配置简单!我本来还想着自己折腾一套解决方案呢?现在看来x11docker真是太赞了!赶紧分享给我的朋友!

    有18位网友表示赞同!

x11docker:让你的Docker运行图形程序
玻璃渣子

我一直以来都是将Docker局限于开发和测试的环境搭建,没想到它还能用来运行GUI应用程序。对于一些传统的桌面应用迁移到云端来说,X11docker或许是一个不错的选择?

    有10位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/98331.html

Like (0)
小su的头像小su
Previous 2024年8月29日 下午8:33
Next 2024年8月29日 下午8:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注