假设您正在构建一个需要用户界面的应用程序,并在运行脚本时弹出一个窗口。假设您要在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应用程序,并在屏幕上显示它们并与之交互。