0

有各种各样的文章,如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 startanddocker 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 startand在 Docker 容器上的 MyFiles 下运行脚本 xyz.sh docker attach

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

4

1 回答 1

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原来是这样createstart。如果您愿意,可以将其分成两步。

如果要附加到容器,它必须首先运行。要让它运行,必须有一个进程当前在里面运行。

于 2016-01-29T22:12:28.747 回答