加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 03:52:02 所属栏目:安全 来源:网络整理
导读:我目前正在尝试在docker容器中运行一些GUI应用程序.我一直在jessie frazelle github尝试这些.但是我可以构建图像(或从docker hub获取)并运行它们没有任何可见的错误但是,窗口不显示(我无法看到应用程序). 我在Ubuntu 16.04上运行Docker版本1.13.1 图像来自:

我目前正在尝试在docker容器中运行一些GUI应用程序.我一直在jessie frazelle github尝试这些.但是我可以构建图像(或从docker hub获取)并运行它们没有任何可见的错误但是,窗口不显示(我无法看到应用程序).

我在Ubuntu 16.04上运行Docker版本1.13.1

图像来自:

FROM debian:stretch
MAINTAINER Jessie Frazelle 

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

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

但我仍然无法显示窗口.

>我怎样才能使这个工作?
>我从根本上缺少什么?

任何帮助,将不胜感激.

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

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

$xhost +SI:localuser:root

(我不知道这个的安全含义,但root应该能够以任何一种方式连接……)

2)在容器中添加与用户会话匹配的用户.如果您在主机系统中使用的用户具有UID = 1000,则可以在容器内创建虚拟用户:

$useradd -u 1000 my_user

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读