【发布时间】:2019-06-28 16:50:18
【问题描述】:
免责声明:这个问题已经在 Stackoverflow 和其他场所以不同的形式提出,但我无法解决。所以我希望有人可以帮助我一劳永逸地解决这个问题。
由于安全问题,我需要在我的 Docker 容器上启用 x11 转发工作,而根本不使用 xhost。我想将/tmp/.X11-unix 套接字和~/.Xauthority 暴露给 Docker 容器,以便它可以像客户端一样使用它们连接到 X-server。
我可以将我的问题归结为一个简单的Dockerfile。我有一个 docker-compose.yml 来运行 Dockerfile。
Dockerfile:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
docker-compose.yml:
version: '2.3'
services:
test:
build: .
command: /bin/bash
environment:
DISPLAY: $DISPLAY
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- ~/.Xauthority:/root/.Xauthority
这两个文件位于同一个文件夹中。运行:
# To build the container
$ docker-compose up --build
# To run it
$ docker-compose run test
# In the container run:
$ xclock
# See the xauth list
$ xauth list
如果您在主机系统中运行xhost +,X-server 将免除身份验证,xclock 程序将成功运行。否则,它会抱怨Error: Can't open display: :0。
我想解决这个问题没有 xhost,并且仅仅通过暴露的套接字和X 身份验证建立到X 服务器的成功连接。有什么帮助吗?
操作系统:Ubuntu 16.04
Docker 版本:18.09.1,构建 4c52b90
docker-compose 版本:1.23.2,构建 1110ad01
【问题讨论】:
-
这方面有什么线索吗?我也在为类似的问题而苦苦挣扎,我还找不到任何解决方法。我也有一个限制,我不能使用 network_mode: "host" 因为我有多个容器互相交谈......
标签: docker docker-compose x11 x11-forwarding