Docker 映像构建期间的X11交互
我正在尝试为需要用户在构建过程中进行交互的映像创建Dockerfile。我知道这非常难看,但没有简单的方法可以解决,因为它涉及到使用专有安装程序安装遗留软件 构建后,容器将使用Docker 映像构建期间的X11交互,docker,Docker,我正在尝试为需要用户在构建过程中进行交互的映像创建Dockerfile。我知道这非常难看,但没有简单的方法可以解决,因为它涉及到使用专有安装程序安装遗留软件 构建后,容器将使用xpra通过web套接字公开X11应用程序 目前,我通过创建一个卷并在第一次运行容器时进行安装来实现它。不过,这会造成一点维护问题,因为我想将预构建的映像发送到注册表 我愿意牺牲容器构建自动化的可能性,因为它很少重建,但经常部署 我考虑过的事情: 在构建期间运行xpra。然后如何公开端口以便访问web界面 在生成期间导出
xpra
通过web套接字公开X11应用程序
目前,我通过创建一个卷并在第一次运行容器时进行安装来实现它。不过,这会造成一点维护问题,因为我想将预构建的映像发送到注册表
我愿意牺牲容器构建自动化的可能性,因为它很少重建,但经常部署
我考虑过的事情:
- 在构建期间运行
。然后如何公开端口以便访问web界面xpra
- 在生成期间导出
。如何在构建期间通过隧道传输X11流量$DISPLAY
- 运行Xvfb并尝试使用xaut等工具实现自动化。这将是一个长期目标,但绝非易事。我希望现在能快速破解
我意识到这是Docker的一种反模式,但也是Docker真正发挥作用的一个用例:导出一个旧的应用程序,这是一个噩梦,需要以易于使用的格式从浏览器运行。我知道这个问题不久前就被问到了,但我最近遇到了同样的问题。既然没有回复,我就加上我的。我通过实现下面概述的多步骤构建过程来“解决”这个问题
# Dockerfile
FROM centos:6.10
RUN yum -y install curl glibc.i686 libX11.i686 xorg-x11-utils zlib.i686 libstdc++.i686 \
&& yum clean all
$ 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 run--name--env=“DISPLAY”\
--volume=“$HOME/.Xauthority:/root/.Xauthority:rw”--net=host\
bash-c“”
$ 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 run--name--env=“DISPLAY”\
--volume=“/tmp/.X11 unix:/tmp/.X11 unix”\
bash-c“”
$ docker commit <container_name> <final-image-name>:<tag>
$ docker rm <container_name>
$docker提交:
$docker rm
$ docker images | grep <final-image-name>
$docker images|grep
$ docker run -it --rm <final-image-name>:<tag> bash
$docker run-it--rm:bash
$ docker login <server>
$ docker push <final-image-name>:<tag>
$docker登录
$docker推送:
阅读您也可以使用或XvfbTo澄清:我知道如何运行GUI应用程序。我需要的是在构建时与GUI交互
$ docker login <server>
$ docker push <final-image-name>:<tag>