Запустите и подключите док-контейнер с переадресацией X11.

Существуют различные статьи, такие как эта, это и это и многое другое, объясняющее, как использовать переадресацию X11 для запуска приложений с графическим интерфейсом в Docker. Я использую контейнер Centos Docker.

Однако все эти подходы используют

docker run

со всеми соответствующими опциями, чтобы визуализировать результат. Любое использование docker run создает новый образ и выполняет над ним операцию.

Способ работы в том же контейнере состоит в том, чтобы использовать docker start, за которым следует docker attach, а затем выполнять команды в приглашении контейнера. Кроме того, скрипт (скажем, xyz.sh), который я собираюсь запустить в контейнере Docker, находится внутри папки 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
  1. Как я могу запустить скрипт xyz.sh в MyFiles в контейнере Docker, используя docker start и docker attach?

  2. Кроме того, поскольку расположение и имя сценария могут различаться, я хотел бы знать, обязательно ли включать каждый из этих путей в системную переменную пути в контейнере Docker или это можно сделать и во время выполнения?


person GvanJoic    schedule 28.01.2016    source источник


Ответы (1)


Мне кажется, ваша проблема связана не с пересылкой 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. Вы можете разделить его на два этапа, если хотите.

Если вы хотите подключиться к контейнеру, он должен быть запущен в первую очередь. И чтобы он работал, внутри должен быть запущен процесс.

person Herve Nicol    schedule 29.01.2016
comment
Спасибо @Herve. Проверим это и обновим обсуждение и отзывы - person GvanJoic; 01.02.2016