MacホストマシンのUbuntuDockerコンテナ内でGUIアプリケーションを実行しようとしています。
xterm
とタグ付けされた私のテストDockerfileは、
_FROM ubuntu:xenial
RUN apt-get update && apt-get install -y xterm
RUN useradd -ms /bin/bash xterm
USER xterm
WORKDIR /home/xterm
_
次の このチュートリアル 、私は
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
_を開始し、E connect(5, LEN=4 AF=1 ":0", 4): No such file or directory
を出力しました。docker run -it --rm -e DISPLAY=192.168.178.36:0 --entrypoint /usr/bin/xterm xterm
_を実行しました。ここで、_192.168.178.36
_はen0IPアドレスです。これは_/usr/bin/xterm: Xt error: Can't open display: 192.168.178.36:0
_を出力し、エラーはsocatに2回表示されます。 GUIは表示されません。socat
エラーはどういう意味ですか?
システムの詳細:
XQuartzXソケットの名前は/tmp/.X11-unix/X0
のようです。少なくとも、そのファイルはXQuartzの起動時にXQuartzによって作成されますが、DISPLAY
変数には ":0"が含まれているため、socat
が転送されていました。存在しないソケットに。
Socatコマンド(socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:/tmp/.X11-unix/X0
)で「:0」の代わりにそのファイルを使用すると、エラーは発生しなくなりました。 xtermコンテナを実行すると、No protocol specified
エラーの前にCan't open display
が追加で出力されます。
これは認証によって解決され、最終的にxterm
の実行を許可するxhost +
を実行しましたが、これは安全ではないため、 with xauth の方がよい場合があります。