Docker 容器中 GUI 应用程序的 X11 转发

2024-07-04

我目前正在尝试在 docker 容器中运行一些 GUI 应用程序。我一直在尝试那些杰西·弗雷泽尔 https://github.com/jessfraz at github https://github.com/jessfraz/dockerfiles。不过,我可以构建图像(或从 docker hub 获取)并运行它们,没有任何可见的错误,但是窗口不显示(我看不到应用程序)。

我在 Ubuntu 16.04 上运行 Docker 版本 1.13.1

该图像是从以下位置创建的:

FROM debian:stretch
MAINTAINER Jessie Frazelle <[email protected] /cdn-cgi/l/email-protection>

RUN apt-get update && apt-get install -y \
    libreoffice \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT [ "libreoffice" ]

我正在使用的运行命令如下:

docker run -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/localtime:/etc/localtime \
    -e DISPLAY=unix$DISPLAY 
    -v $HOME/Documents:/root/Documents \
    -e GDK_SCALE \
    -e GDK_DPI_SCALE \
    --name libreoffice \
    jess/libreoffice

在搜索了很多资料后,我发现上面的内容应该可以工作,并且大多数人都说运行命令中需要以下几行,

    -v /tmp/.X11-unix:/tmp/.X11-unix
    -e DISPLAY=unix$DISPLAY

但我仍然无法显示窗口。

  1. 我怎样才能让它发挥作用?
  2. 我从根本上缺少什么?

任何帮助,将不胜感激。


为了能够与 X 服务器通信,必须允许运行应用程序的用户与 X 服务器通信。所以我认为你有两个选择:

  1. 允许容器中的用户连接到 X 服务器。如果您的应用程序与用户一起运行root在容器内,您可以使用:

    $ xhost +SI:本地用户:root

(我不知道这样做的安全隐患,但 root 应该能够以任何一种方式连接......)

  1. 在容器中添加与您的用户会话匹配的用户。如果您在主机系统中使用的用户的 UID = 1000,您可以在容器内创建一个虚拟用户:

    $ useradd -u 1000 my_user

然后使用该用户在容器内运行您的应用程序。这不需要对接受的主机进行任何更改(因为用户 1000 已经能够连接)。

从这两个选项来看,第二个似乎更好,因为它不需要在主机系统中进行任何更改,并且如果您需要在主用户无法匹配UID=1000的其他系统中使用此容器,您可以使容器从环境变量接收正确的 uid,然后设置正确的用户(useradd + chown 程序文件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 容器中 GUI 应用程序的 X11 转发 的相关文章

随机推荐

  • 组合点击和触摸启动事件不起作用

    我有一个网站 我正在尝试使其在移动设备上也能正常运行 但是 当我分别组合 PC 和平板电脑的单击和 touchstart 事件时 两者都不起作用 单击事件附加到的元素不会触发 谁能解释我应该如何解决这个问题 这是一个元素不起作用的示例 笔具
  • 以编程方式为存储库启用 Github Pages

    有没有办法通过api启用Github页面 不请求页面构建 我的意思是最初启用该功能并指向分支 您只需将内容推送到远程 git 存储库即可 你必须区分用户页面 用户名 github io 和项目页面 用户名 github io 项目名 用户页
  • 如何用手指在WP7中绘制形状?

    如何用手指在WP7中绘制形状 我正在尝试实现一个简单的绘画应用程序 但我不确定如何进行绘图 有两个示例供您使用 您可以从以下链接下载 示例项目1 http windowsphonegeek com tips drawing in wp7 2
  • 准备 iPhone 的调试器支持

    我无法在 iPhone 上安装该应用程序 我被这条消息困住了 准备 iPhone 的调试器支持 在这里尝试了所有答案 https stackoverflow com questions 46316373 xcode9 iphone is b
  • 连接到主机 localhost 端口 22:连接被拒绝

    在我的本地计算机上安装 hadoop 时 出现以下错误 ssh vvv localhost OpenSSH 5 5p1 OpenSSL 1 0 0e fips 6 Sep 2011 debug1 Reading configuration
  • 如何清除分享链接缓存?

    例如 我尝试分享一个链接http apps facebook com appname http apps facebook com appname 在我的个人资料页面上的 更新状态 下 我修改了应用程序的内容后 它仍然显示缓存 我尝试使用h
  • ((指针)(P)+1)^什么时候可以起作用?

    我正在研究delphiXE2 我正在研究PInteger 如果我在我的delphi代码中这样做 var P PInteger testInt Integer Scores array 0 4 of Integer 33 44 56 78 7
  • 使用 SSE2 优化 RGB565 到 RGB888 的转换

    我正在尝试使用 SSE2 和基本公式来优化从 565 到 888 的像素深度转换 col8 col5 lt lt 3 col5 gt gt 2 col8 col6 lt lt 2 col6 gt gt 4 我采用两个 2x565 128 位
  • 实现 gensim.LdaMallet 时出错

    我按照此链接上的说明进行操作 http radimrehurek com 2014 03 tutorial on mallet in python http radimrehurek com 2014 03 tutorial on mall
  • OpenCV 中二值图像的 width 和 widthStep 不同

    我使用 cvLoadImage 在 OpenCV 中加载二进制图像 如下所示 IplImage myImg cvLoadImage
  • Windows 上的 Xvfb

    我正在使用 pyvirtualdisplay 使用无头 Firefox 浏览器运行测试 这是我正在使用的代码 from selenium import webdriver from selenium webdriver support ui
  • VB6 的线程模型是什么?

    我正在将一个古老的 VB6 程序移植到 C Net 我不太了解VB6 我问这个是为了更好地理解它 旧的VB6程序有一个程序执行的主过程 但是它also有许多用于套接字事件或计时器事件的事件处理程序 以及这些经常操纵的共享资源 例如 公共全局
  • 如何在CSS中搜索某些内容时隐藏搜索图标

    我想隐藏search当用户搜索某些内容时的图标 连我都想躲起来 保留图标和清除图标x就这样 问题如下图所示 NOTE 我想保持相同的差距search icon and Search text input type search width
  • React:将组件存储在对象中

    我的用户配置文件中有几十个字段 我正在尝试构建一种有效的方法来在适当的输入表单组件中显示它们 例如 配置文件可能如下所示 profile1 name Cornelius Talmadge phone 1 如果我可以像这样堆叠组件 expor
  • 处理本地存储库中的旧快照的最佳方法?

    我们有一个 Nexus 本地存储库管理器 用于处理我们所有的内部项目 以及外部存储库的镜像 对于我们的内部项目 我们只保留最新版本的快照构建 例如 如果我们有 ProjectX 1 0 1 1 和 1 2 SNAPSHOT 那么一旦 1 2
  • 如何使用 OpenID Connect WebFinger 端点?

    正在阅读描述在这里 https connect2id com learn openid connect optional endpoints它说 WebFinger 允许根据给定用户的电子邮件地址或其他一些信息动态发现 OpenID Con
  • 在 Fortran 中分配字符数组

    我必须编写一个可以由 C 和 Fortran 调用的子例程 该子例程将文件名作为其参数之一 我知道为了与 C 良好地互操作 ISO C 绑定建议使用字符数组进行互操作 我的问题是 是否存在易于编写的字符数组文字之类的东西 我有一个这样的子程
  • 使用 Powershell 脚本开始调试 Visual Studio 项目

    我曾经在 Visual Studio 中打开解决方案文件 右键单击项目 选择 调试 gt 启动新实例 来启动调试会话 我可以编写一个 powershell 脚本来自动执行此操作吗 为了让事情变得更简单 自动化不必重建和项目 脚本只需要在 V
  • Grails:未刷新的会话和回滚的事务之间有什么区别?

    我对会话和交易感到非常困惑 我基本上不明白两者都有什么意义 而且我很困惑何时使用其中之一 未刷新的会话和未提交的事务有什么区别 我什至不知道如何询问我不知道的事情 是否有资源可以提供常见会话和事务情况的良好示例 以便我可以看到差异 一般来说
  • Docker 容器中 GUI 应用程序的 X11 转发

    我目前正在尝试在 docker 容器中运行一些 GUI 应用程序 我一直在尝试那些杰西 弗雷泽尔 https github com jessfraz at github https github com jessfraz dockerfil