运行 X 服务器使用 Docker

Running X server using Docker

我一直在努力使以下方法正常工作但没有成功:

Dockerfile

FROM ubuntu:latest

#To install without any interactive dialogue
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update
# Installing Nautilus File Manager
RUN apt-get install nautilus -y

CMD ["nautilus"]

然后 运行:

sudo docker build -t nautilus-ubuntu .

sudo docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix nautilus-ubuntu

我得到的错误是:

Unable to init server: Could not connect: Connection refused

这似乎以前被问过很多,但我已经尝试了一个小时我能遇到的一切,除了 xhost +(这是不安全的,我不想使用)之外别无他法这项工作。

需要注意的一件事是,我试图让它以一种我可以构建它并立即启动目标 GUI 应用程序的方式工作,而无需登录到 bash 会话并执行进一步的事情。

我找到了答案here.

应该将这些添加到 Dockerfile 中:

# Arguments picked from the command line!
ARG user
ARG uid
ARG gid

#Add new user with our credentials
ENV USERNAME ${user}
RUN useradd -m $USERNAME && \
        echo "$USERNAME:$USERNAME" | chpasswd && \
        usermod --shell /bin/bash $USERNAME && \
        usermod  --uid ${uid} $USERNAME && \
        groupmod --gid ${gid} $USERNAME

USER ${user}

WORKDIR /home/${user}

然后,创建 xauth 文件:

xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -

然后,运行 使用:

docker build --build-arg user=$USER --build-arg uid=$(id -u) --build-arg gid=$(id -g) -t nautilus-ubuntu .

docker run -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth:rw -e XAUTHORITY=/tmp/.docker.xauth -t nautilus-ubuntu