web-dev-qa-db-ja.com

socat: "E connect(5、LEN = 4 AF = 1":0 "、4):そのようなファイルまたはディレクトリはありません" MacOSのDockerでGUIアプリケーションを実行しようとすると

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
_

次の このチュートリアル 、私は

  • xQuartzのネットワーククライアントからの接続を許可
  • _socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"_を開始し、E connect(5, LEN=4 AF=1 ":0", 4): No such file or directoryを出力しました。
  • XQuartzをオープン
  • _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エラーはどういう意味ですか?

システムの詳細:

  • Docker Desktop 2.2.1.0、Docker Engine 19.03.05
  • MacOSMojaveバージョン10.14.5
1
nnnmmm

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 の方がよい場合があります。

1
nnnmmm