使用X11转发启动并附加docker容器

时间:2016-01-28 17:10:19

标签: docker x11 x11-forwarding

有各种文章,例如thisthisthis等等,它们解释了如何使用X11转发在Docker上运行GUI应用程序。我使用的是Centos Docker容器。

但是,所有这些方法都使用

docker run

使用所有适当的选项以显示结果。对docker run的任何使用都会创建一个新图像并在此基础上执行操作。

在同一个容器中工作的方法是使用docker start后跟docker attach,然后在容器的提示符下执行命令。另外,我打算在Docker容器上运行的脚本(比如说xyz.sh)位于容器根目录下的文件夹MyFiles中,并接受一个参数

那么还有一种方法可以使用docker start和/或docker attach运行脚本,还可以使用X11转发它吗?

这是我尝试过的,虽然希望避免docker run而是使用docker startdocker attach

sudo docker run -it \
    --env="DISPLAY" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    centos \
    cd MyFiles \
    ./xyz.sh param1
export containerId='docker ps -l -q'

这反过来又引发了一个错误 -

/usr/bin/cd: line 2: cd: MyFiles/: No such file or directory
  1. 如何使用docker startdocker attach在Docker容器上的MyFiles下运行脚本xyz.sh?

  2. 此外,由于脚本的位置和名称可能会有所不同,我想知道是否必须在Docker容器的系统路径变量中包含这些路径,或者是否可以在运行时完成也

1 个答案:

答案 0 :(得分:0)

在我看来,你的问题不在于X11转发,而在于使用一般的Docker语法。

你可以这么简单地做到:

sudo docker run -it \
    --env="DISPLAY" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    -w MyFiles \
    --rm \
    centos \
    bash -c xyz.sh param1

我补充说:

  • --rm以避免堆放旧的死容器。
  • -w workdir,明显的含义
  • /bin/bash -c以确保您的脚本由bash解释。

如何不使用docker run

run实际上就像create然后是start。如果您愿意,可以分两步拆分。

如果要附加到容器,则必须先运行它。为了使它运行,必须有一个当前正在运行的进程。