首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像构建过程中的X11交互

图像构建过程中的X11交互
EN

Stack Overflow用户
提问于 2017-04-22 18:23:41
回答 1查看 604关注 0票数 1

我试图为在构建过程中需要用户交互的图像创建一个Dockerfile。我知道这是非常丑陋的,但是没有简单的方法可以绕过它,因为它涉及到使用专有安装程序安装遗留软件。

一旦构建,容器将使用X11在web套接字上公开一个xpra应用程序。

目前,我通过创建一个卷并在容器第一次运行时进行安装来使其工作。不过,这会造成一些维护问题,因为我想将预构建的映像发送到注册表。

我愿意牺牲构建容器自动化的可能性,因为它很少被重建,但是经常被部署。

我考虑过的事情:

  • 在构建过程中运行xpra。然后如何公开端口,以便访问web接口?
  • 在构建过程中导出$DISPLAY。如何在构建过程中将X11流量隧道化?
  • 运行Xvfb并尝试使用例如xaut实现自动化。这将是长期目标,但并不容易实现。我希望现在能有一个快速的黑客攻击。

我意识到这是Docker的一种反模式,但也是Docker真正发光的一个用例:导出一个遗留应用程序,这是一个噩梦,需要在浏览器上以易于使用的格式设置。

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 18:42:51

我知道这个问题是在不久前提出的,但我最近遇到了同样的问题。既然没有贴出答案,我就把我的加上去。我通过实现下面概述的多步构建过程“解决了”这个问题。

  1. 创建一个dockerfile来构建基本映像,该映像安装运行安装程序所需的工具和依赖项。例如:centos的Dockerfile:6.10运行yum -y install curl glibc.i686 libX11.i686xorg-x11-utils zlib.i686 libstdc++.i686 && yum清除所有
  2. 从dockerfile构建图像,并为图像ID构建grep。注意:在构建时,我故意不对此图像进行命名/标记。由于还没有办法“un”一个图像,中间图像名称:标记总是混乱的输出"$ docker映像“。 码头建造费。grep成功地切割了-d‘’-f3
  3. 运行基本映像并在容器中执行安装程序。另外,命名容器以便于以后使用。注意:因为我通过ssh访问我的X11主机,所以我使用以下运行命令在ssh上隧道化了: $ docker运行--名称为 --env="DISPLAY“\ --volume="$HOME/.Xauthority:/root/.Xauthority:rw”--net=host \ bash -c“

但是,如果您在本地运行docker,则可以使用以下命令:

代码语言:javascript
复制
    $ docker run --name <container_name> --env="DISPLAY" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix" \
    <IMAGE ID> bash -c "<your commands to curl the installer and execute it>"
  1. 根据容器的更改创建一个新的映像。 $ docker提交 $ docker rm
  2. 检查是否创建了新的图像标记。 $ docker图像\ grep
  3. 运行你的新形象。 $ docker run -it --rm bash
  4. 可选地,将图像推送到一个码头注册中心:docker集线器、工件等等。 $ docker登录$ docker推送
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43562969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档