【问题标题】:Connect to X11-server from docker without xhost but with xauth在没有 xhost 但使用 xauth 的情况下从 docker 连接到 X11-server
【发布时间】: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


【解决方案1】:

我只是猜测。你能用吗

  • --network host,
  • --env DISPLAY=127.0.0.1,和
  • --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix,readonly=true

它似乎可以工作,但我没有亲自尝试过。但是,您可能决定不想使用主机网络。

更新:我试过了,它不起作用。我将把这个答案作为一个不起作用的例子。

【讨论】:

  • 感谢您的回复,因为我没有工作。另外,host 网络模式在我的用例中是我不喜欢的,因为我将在更复杂的场景中使用我的容器。
【解决方案2】:

您的设置几乎正确,您只需将network_mode 更改为host。否则,docker 将为容器创建一个单独的网络,因此我们无法连接到主机 xServer 实例。

请试用这个 docker-compose 文件:

version: '2.3'
services:
  test:
    build: .
    command: /bin/bash
    environment:
      DISPLAY: $DISPLAY
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - ~/.Xauthority:/root/.Xauthority
    network_mode: "host"

如果您坚持使用简单的命令行而不是撰写:

docker run --rm -it --network host -e DISPLAY=$DISPLAY -v /home/<hostUser>/.Xauthority:/home/<containerUser>/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix <container>

请查看本教程了解更多信息:https://www.cloudsavvyit.com/10520/how-to-run-gui-applications-in-a-docker-container/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2011-06-15
    相关资源
    最近更新 更多