免责声明:这个问题已经被问在#2和其他场馆不同的形式,但我可以让没有工作。所以,我希望有人能帮助我想出解决办法一劳永逸。
我需要让我的码头工人集装箱X11转发工作,而无需使用xhost
可言,因为安全问题。我想在/tmp/.X11-unix
插座和~/.Xauthority
暴露在多克尔容器,以便它可以用它们来连接到像一个客户端的X服务器。
我能我的问题归结为一个简单的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服务器被放弃和xclock
程序将运行成功。否则,它会抱怨Error: Can't open display: :0
。我想解决这个问题,而xhost
,而仅仅通过建立通过暴露的插座和X认证成功连接到X服务器。任何有助于对?
操作系统:Ubuntu的16.04
泊坞窗版本:18.09.1,建立4c52b90
泊坞窗,撰写版本:1.23.2,构建1110ad01
我只是猜测。你可以使用
--network host
,--env DISPLAY=127.0.0.1
和--mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix,readonly=true
这似乎是它的工作,但我还没有亲自尝试过。然而,你可能会决定你只是不想使用主机网络。
更新:我尝试过了,这是行不通的。我会离开这个答案最多的东西不起作用的例子。