首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱图形用户界面应用程序的X11转发

码头集装箱图形用户界面应用程序的X11转发
EN

Stack Overflow用户
提问于 2017-02-11 22:09:22
回答 1查看 10.3K关注 0票数 8

我目前正试图在docker容器中运行一些GUI应用程序。我一直在尝试杰茜·弗雷泽尔github的那些。不过,我可以构建图像(或者从停靠中心获取)并运行它们,不会出现任何明显的错误,但是窗口不会显示(我看不到应用程序)。

我在Ubuntu 16.04上运行Docker版本1.13.1

该图像创建于:

代码语言:javascript
复制
FROM debian:stretch
MAINTAINER Jessie Frazelle <jess@linux.com>

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

ENTRYPOINT [ "libreoffice" ]

我使用的run命令如下:

代码语言:javascript
复制
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

在搜索了许多源之后,我可以看到上面的内容应该可以工作,而且大多数人都说在run命令中需要下面的行,

代码语言:javascript
复制
    -v /tmp/.X11-unix:/tmp/.X11-unix
    -e DISPLAY=unix$DISPLAY

但我还是不能把窗户展示出来。

  1. 我怎么才能让这个起作用?
  2. 我从根本上错过了什么?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-02-11 22:39:51

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

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

(我不知道这对安全的影响,但是root应该能够以任何一种方式连接.)

  1. 在与用户会话匹配的容器中添加一个用户。如果在主机系统中使用的用户具有UID = 1000,则可以在容器中创建一个虚拟用户: $ useradd -u 1000 my_user

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42181805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档