有各种文章,例如this,this和this等等,它们解释了如何使用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 start
和docker 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
如何使用docker start
和docker attach
在Docker容器上的MyFiles下运行脚本xyz.sh?
此外,由于脚本的位置和名称可能会有所不同,我想知道是否必须在Docker容器的系统路径变量中包含这些路径,或者是否可以在运行时完成也
答案 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
。如果您愿意,可以分两步拆分。
如果要附加到容器,则必须先运行它。为了使它运行,必须有一个当前正在运行的进程。