LoginSignup
4
2

More than 3 years have passed since last update.

Docker コンテナで x11 アプリを動かす (コンテナからのネットワークアクセス対応)

Last updated at Posted at 2020-11-23

Docker コンテナで x11 アプリを動かす (コンテナからのネットワークアクセス対応)

Docker コンテナ上で動く X11 アプリケーションのウィンドウをディスプレイに表示させる という記事で xeyes を動作させることができたのですが、

以下のように --net host を指定しています。

$ docker run --rm -it \
    --net host \
    -e DISPLAY=$DISPLAY \
    -v $HOME/.Xauthority:/root/.Xauthority \
    xeyes

--net host は docker host と docker container の間だけで通信できるネットワークを利用します。

なので、 docker container からインターネットに接続したい場合には使用することができません。

この記事では、container からネットワークにアクセスできてかつ X11 アプリを使えるようにします。

Dockerfile

オリジナル との違い

  • xeyes を直接 CMD で起動していましたが、ネットワークアクセスを試すために /bin/bash を起動します。
  • bash を image にインストールします。(ここはテスト目的なので本質とは関係ないです)

conf/Dockerfile の中身

FROM alpine

RUN apk --no-cache add bash xeyes

CMD ["/bin/bash"]

docker image のビルド

docker build -t xeyes conf

local ユーザーのみ X の接続を許可する

xhost +local:

container の起動

オリジナル との違い

  • 環境変数 DISPLAYunix${DISPLAY} を渡す。
  • /tmp/.X11-unix-v でホストと共有する。
docker run --rm -it \
    -e DISPLAY=unix${DISPLAY} \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v $HOME/.Xauthority:/root/.Xauthority \
    xeyes

コンテナからのネットワークアクセス確認

bash-5.0# ping www.example.com
PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: seq=0 ttl=51 time=149.040 ms
64 bytes from 93.184.216.34: seq=1 ttl=51 time=172.391 ms
64 bytes from 93.184.216.34: seq=2 ttl=51 time=195.793 ms
^C
--- www.example.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 149.040/172.408/195.793 ms

コンテナから x11 アプリを起動

bash-5.0# xeyes

エラーメッセージ

xhost +local: を実施していない場合、以下のエラーになります。

bash-5.0# xeyes 
No protocol specified
Error: Can't open display: unix:0

GitHub

GitHub にこの記事で書いた Dockerfile やスクリプトなどを置いています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2