gpt4 book ai didi

docker - 图像构建期间的X11交互

转载 作者:行者123 更新时间:2023-12-02 19:37:18 25 4
gpt4 key购买 nike

我正在尝试为在构建期间需要用户交互的镜像创建一个Dockerfile。我知道这非常丑陋,但是没有轻松的方法可以解决,因为它涉及使用专有安装程序来安装旧版软件。

构建完成后,容器将使用xpra通过Web套接字公开X11应用程序。

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

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

我考虑过的事情:

  • 在构建过程中运行xpra。然后如何暴露端口以便可以访问Web界面?
  • 在构建过程中导出$DISPLAY。在构建过程中如何通过X11流量进行隧道传输?
  • 运行Xvfb并尝试使用例如xaut。这将是长期目标,但绝非易事。我希望现在能快速攻克。

  • 我意识到这是Docker的反模式,也是Docker真正发挥作用的用例:导出一个噩梦般的旧应用程序,以可从浏览器运行的易于使用的格式进行设置。

    最佳答案

    我知道这个问题是在不久前提出的,但是最近我遇到了同样的问题。由于没有答案发布,因此我将添加我的答案。我通过实现以下概述的多步骤构建过程来“解决”此问题。

  • 创建一个dockerfile来构建基础镜像,该基础镜像安装了运行安装程序所需的工具和依赖项。例如:
    # Dockerfile
    FROM centos:6.10
    RUN yum -y install curl glibc.i686 libX11.i686 xorg-x11-utils zlib.i686 libstdc++.i686 \
    && yum clean all
  • 从dockerfile和grep构建镜像以获取IMAGE ID。
    注意:我故意在构建时不命名/标记该图像。由于还没有办法“取消标记”镜像,因此中间镜像名称:tag将始终使“$ docker images”的输出混乱。
    $ docker build . | grep Successfully | cut -d' ' -f3
  • 运行基础镜像并在容器中执行安装程序。另外,命名容器以便以后使用。
    注意:因为我通过ssh访问我的docker主机,所以我使用以下运行命令在ssh上隧道X11:
    $ docker run --name <container_name> --env="DISPLAY" \
    --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --net=host \
    <IMAGE ID> bash -c "<your commands to curl the installer and execute it>"

  • 但是,如果您在本地运行docker,请改用以下命令:
        $ 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>"
  • 根据容器的更改创建一个新图像。
    $ docker commit <container_name> <final-image-name>:<tag>
    $ docker rm <container_name>
  • 检查是否已创建新图像标签
    $ docker images | grep <final-image-name>
  • 运行新图像。
    $ docker run -it --rm <final-image-name>:<tag> bash
  • (可选)将镜像推送到docker注册表:dockerhub,artifactory等。
    $ docker login <server>
    $ docker push <final-image-name>:<tag>
  • 关于docker - 图像构建期间的X11交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562969/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com