启动并连接带有X11转发的docker容器

启动并连接带有X11转发的docker容器,docker,x11,x11-forwarding,Docker,X11,X11 Forwarding,有各种各样的文章,如,以及更多,解释了如何使用X11转发在Docker上运行GUI应用程序。我使用的是Centos Docker容器 然而,所有这些方法都使用 docker运行 使用所有适当的选项,以可视化结果。任何使用docker run的操作都会创建一个新图像,并在此图像上执行操作 在同一容器中工作的一种方法是使用docker start,然后使用docker attach,然后在容器提示下执行命令。此外,我打算在Docker容器上运行的脚本(比如xyz.sh)驻留在容器根目录中的MyFil

有各种各样的文章,如,以及更多,解释了如何使用X11转发在Docker上运行GUI应用程序。我使用的是Centos Docker容器

然而,所有这些方法都使用

docker运行

使用所有适当的选项,以可视化结果。任何使用
docker run
的操作都会创建一个新图像,并在此图像上执行操作

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

那么,有没有一种方法可以在X11转发脚本时使用
docker start
和/或
docker attach
运行脚本

这就是我尝试过的,尽管我希望避免
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容器的系统路径变量中包含这些路径中的每一个,或者是否也可以在运行时完成


  • 在我看来,您的问题不在于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
    。如果愿意,可以将其分为两步


    如果要附加到容器,必须先运行该容器。要让它运行,必须有一个进程正在运行。

    谢谢@Herve。将对此进行检查并更新讨论和反馈