sha*_*133 8 x11 x11-forwarding docker docker-compose
免责声明:这个问题已经在 Stackoverflow 和其他场所以不同的形式提出,但我无法解决。所以我希望有人能帮我一劳永逸地解决这个问题。
xhost由于安全问题,我需要在我的 Docker 容器上启用 x11 转发工作而不使用任何东西。我想将/tmp/.X11-unix套接字公开~/.Xauthority给 Docker 容器,以便它可以像客户端一样使用它们连接到 X 服务器。
我可以将我的问题归结为一个简单的问题Dockerfile。我有一个docker-compose.yml来运行它Dockerfile。
Dockerfile:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这两个文件位于同一文件夹中。跑步:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
Run Code Online (Sandbox Code Playgroud)
如果您在主机系统中运行xhost +,则 X 服务器将免除身份验证,并且xclock程序将成功运行。否则,它会抱怨Error: Can't open display: :0。我想解决这个问题,而无需 xhost通过公开的套接字和 X 身份验证建立与 X 服务器的成功连接。有什么帮助吗?
操作系统:Ubuntu 16.04
Docker 版本:18.09.1,内部版本 4c52b90
docker-compose版本:1.23.2,内部版本 1110ad01
小智 5
您的设置几乎是正确的,您只需将 更改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"
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用简单的命令行而不是撰写:
docker run --rm -it --network host -e DISPLAY=$DISPLAY -v /home/<hostUser>/.Xauthority:/home/<containerUser>/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix <container>
Run Code Online (Sandbox Code Playgroud)
请查看本教程以获取更多信息:https://www.cloudsavvyit.com/10520/how-to-run-gui-applications-in-a-docker-container/
| 归档时间: |
|
| 查看次数: |
10011 次 |
| 最近记录: |