Help us understand the problem. What is going on with this article?

SSH 接続先で走っている Docker コンテナ内で実行した X アプリの GUI を SSH クライアントで表示する

More than 3 years have passed since last update.

SSH + X11 転送で接続しているリモートホスト上で走っている Docker コンテナの中で X アプリ (X クライアント) を実行し、その GUI を SSH 接続元のクライアントのディスプレイで表示・操作したい (手元の X サーバと繋げたい)。そのため、Docker コンテナからホスト (SSH サーバ) の SSH X11 転送ポート (6000 + ディスプレイ番号) が見えるようにする。

環境

  • Docker 1.12.6
  • Docker イメージ: debian:latest
  • Docker ホスト・SSH サーバ: Ubuntu 16.04.2 LTS (Kernel 4.4.0-64-generic)
  • SSH クライアント: Mac OS X 10.11.6 + XQuartz 2.7.9

手順

  1. Docker コンテナを走らせるホストに X11 転送付きで SSH 接続する (% ssh -Y hoge@fuga)。
  2. Docker コンテナを作成する。このとき (a) コンテナとホストのネットワークインターフェースを共有し (--net=host)、(b) ホストの環境変数 DISPLAY をコンテナに渡して (-e DISPLAY=$DISPLAY)、(c) ホスト側ユーザの .Xauthority をコンテナ側 root (デフォルトユーザ) と共有する (-v $HOME/.Xauthority:/root/.Xauthority:rw)。

    % docker run --rm -i -t --net host -e DISPLAY=$DISPLAY \
        -v $HOME/.Xauthority:/root/.Xauthority:rw \
        debian /bin/bash
    
  3. Docker コンテナ内で X アプリを実行する → 手元の画面に GUI が表示されたら OK

    # apt-get update
    # apt-get install -y x11-apps
    # xeyes
    

ちなみに、単純に Docker のホスト・コンテナ間で X サーバとクライアントを繋ぐには、ホストの X サーバがローカルからの接続をすべて受け入れるようにして (% xhost +local:)、ホストとコンテナで /tmp/.X11-unix を共有して UNIX ドメインソケットでやりとりするのが楽 (ただしセキュリティ的にはアレ)。

% xhost +local:
% docker run --rm -i -t -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    debian /bin/bash

参考

aoksh
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした