大家好,如果您还对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 类似,但允许指定用于数据存储的主机目录。
$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 服务器。
提供所谓的不受信任的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
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/98331.html
用户评论
你是梦遥不可及
简直绝了!我一直想在Docker里运行一些需要GUI的应用,现在终于有了办法!以前总是遇到各种兼容性和部署问题,这下轻松省心多了。谢谢开发者!
有19位网友表示赞同!
心安i
这个X11docker太棒了!让我可以用docker跑那些依赖图形界面软件的项目,简直是开发者的福音啊!之前要来回切换环境真的很麻烦。现在直接在容器里操作更方便快捷。
有17位网友表示赞同!
来瓶年的冰泉
很有意思,一直在用docker运行脚本和服务程序,却不知道可以用它来 запуска graphical applications。这种功能对于一些特定的科研工具或软件来说非常有用,希望能看到更多详细的使用教程!
有20位网友表示赞同!
哽咽
我最近学习Docker,感觉X11docker这个技术很有潜力。特别是对于那些需要交互界面、虚拟环境测试的应用来说,它能够提供一个更便捷的操作解决方案。
有5位网友表示赞同!
余温散尽ぺ
标题有点误导人啊,我以为是让你直接在docker容器里面实现图形化的操作界面,没想到还是依赖到本地X11服务器?有些失落。希望将来能够支持更独立的图形渲染库!
有12位网友表示赞同!
沐晴つ
对于一些需要图形交互的环境搭建来说,X11docker可能并不适合所有场景。比如对性能要求极高的应用,或者需要高分辨率屏幕的情况,直接在本地运行或许更好。
有17位网友表示赞同!
鹿先森,教魔方
这个技术听起来很方便,但我有点担心安全性问题。毕竟X11可以访问整个系统资源,如果Docker容器被攻击… 还是需要慎重考虑安全防护措施!
有8位网友表示赞同!
矜暮
我已经试过了,感觉用X11docker运行图形程序还是很流畅的,而且配置简单!我本来还想着自己折腾一套解决方案呢?现在看来x11docker真是太赞了!赶紧分享给我的朋友!
有18位网友表示赞同!
玻璃渣子
我一直以来都是将Docker局限于开发和测试的环境搭建,没想到它还能用来运行GUI应用程序。对于一些传统的桌面应用迁移到云端来说,X11docker或许是一个不错的选择?
有10位网友表示赞同!