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

📅  最后修改于: 2022-05-13 01:57:32.432000             🧑  作者: Mango

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

假设您正在尝试构建一个 UI 应用程序并将其部署为 Docker 容器。如果您希望该 UI 应用程序在 Docker 容器内运行应用程序时在本地计算机上显示用户界面,则必须将 Docker 容器的显示与本地计算机的显示连接起来。假设您想在 Docker 容器中运行 Mozilla Firefox,但您想访问本地计算机上的 Firefox 浏览器。您可以使用我们将在本文中讨论的一些简单步骤来完成此操作。

浏览整个过程,你需要将你本地Linux机器的X11 socket转发到Docker Container直接使用。除此之外,您还需要转发名为 display 的环境变量。之后,您需要设置服务器主机的权限。让我们连同代码一起完成这些步骤。

1. 创建 dockerfile

使用以下代码创建一个dockerfile。

FROM ubuntu:latest
RUN apt-get -y update
RUN apt-get -y install firefox
RUN apt-get -y install xauth

EXPOSE 8887
CMD firefox

上面的dockerfile包含创建 Ubuntu 基础镜像、在其上运行 apt 更新、安装Xauth和 Firefox 的指令序列。然后它公开端口 8887 并运行 Firefox。 Xauth只是允许 Docker 容器访问显示服务器。

2.复制Cookie连接X Server Displays

在您的本地机器上,使用以下命令获取 cookie 值。



xauth list

授权cookie

授权cookie

复制如下所示的输出:

/unix:  MIT-MAGIC-COOKIE-1  f1fa006c1e51fa8386209f85c57947c4

3. 构建 Docker 镜像

使用以下命令创建 Docker 映像。

docker build -t  .

Docker 构建命令

Docker 构建命令

4. 运行 Docker 容器

使用 Docker run 命令运行 Docker 镜像。

docker run -it --net=host -e DISPLAY -v /tmp/.X11-unix  bash

Docker 运行命令

Docker 运行命令

现在构建了 Docker 映像并启动了容器。它会弹出一个交互式 Ubuntu bash。

5.将cookie添加到列表中

您需要使用以下命令添加在上一步中复制的 cookie。

xauth add 
xauth list

添加饼干

添加饼干

list 命令将验证 cookie 是否已成功添加。

6. 从 bash 运行 Firefox 实例

要运行 Firefox 实例,只需在 bash 中输入“firefox”。您会发现 Firefox 浏览器会在您的本地机器上弹出,即使它在 Docker 容器内运行。使用类似的过程,您几乎可以在 Docker Containers 中运行任何用户界面应用程序,并在您的本地机器上访问它。

运行 Firefox 实例

运行 Firefox 实例

总而言之,在本文中,我们看到了如何使用dockerfile创建 Docker 镜像、构建和运行镜像。我们还讨论了如何将 Docker Container 的显示连接到本地机器的显示,并访问在本地机器上的 Container 内运行的 UI 应用程序。