在Linux中的Docker上运行GUI应用程序

假设您正在构建一个需要用户界面的应用程序,并在运行脚本时弹出一个窗口。假设您要在Docker容器中运行该脚本。现在,您可能希望docker容器为您运行UI应用程序并在屏幕上显示该应用程序。但是,使用普通的docker run命令,您将无法看到UI应用程序或与之交互。您需要将显示器与容器连接在一起。在本文中,我们将讨论如何完全相同。

在这里,我们将看到如何在docker容器中运行firefox实例并在主机中与之交互。为此,我们需要先将X11套接字转发到容器,以便容器可以直接使用它。我们还需要转发显示环境变量。即使这样做,它也可能会失败,因为我们尚未设置X服务器主机的权限。起初,这似乎是一项艰巨的任务。我们将引导您完成本文中的所有步骤。

首先让我们看一下将帮助我们构建映像的dockerfile。

# Set ubuntu as base image
FROM ubuntu

# Install dependencies
RUN apt-get -y update
RUN apt-get -y install xauth
RUN apt-get -y install firefox

#Expose a port number
EXPOSE 8887

# Run firefox
CMD /usr/bin/firefox

我们已将ubuntu作为基本映像。之后,在新形成的ubuntu映像上运行更新。这也将形成一个新的中间层。使用给定的命令安装xauth和firefox。Xauth是一种简单的机制,它允许docker容器访问X服务器(也称为显示服务器)的控制权。但是,我们需要为X服务器当前正在运行的会话手动添加随机生成的cookie。

要访问cookie,请在主机上运行以下命令。

xauth list

输出的形式为-

username/unix:0 MIT-MAGIC-COOKIE-1 8fe8efc75454dbf178bbe00442689406

用户名将是您的系统用户名。复制以上输出。

现在,您可以使用以下命令尝试使用上面创建的dockerfile构建docker映像。

sudo docker run -ti --net=host -e DISPLAY -v /tmp/.X11-unix <IMAGE NAME> bash

这将打开创建的ubuntu映像的重击。

在bash中,运行以下命令。

  • xauth add <先前复制的输出>

  • 使用此命令验证主机系统是否已连接到远程系统-xauth list

  • 运行命令-/ usr / bin / firefox

这将打开一个在容器内运行但显示在屏幕上的firefox窗口。

请注意,如果诸如{无法连接以显示“ -1”}的错误仍然存在,则需要在先前复制的令牌中将−0替换为−1。

执行类似的步骤,您将能够在docker容器内运行任何GUI应用程序,并在屏幕上显示它们并与之交互。