`xhost +local:` がなければ、Chromium は docker から起動しません。

`xhost +local:` がなければ、Chromium は docker から起動しません。
$ xhost
access control enabled, only authorized clients can connect

xterm働く:

$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/root/.Xauthority:ro \
  --env DISPLAY \
  alpine:3.19 sh -euxc 'apk add xterm; exec xterm'

chromiumウィンドウが開き、キーストロークを受け取ったように見えますが、ウィンドウは空です(出力):

$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/root/.Xauthority:ro \
  --env DISPLAY \
  alpine:3.19 sh -euxc 'apk add chromium; exec chromium --no-sandbox'

ローカル接続を許可するとxhost機能します。

$ xhost +local:

$ xhost
access control enabled, only authorized clients can connect
LOCAL:

$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/root/.Xauthority:ro \
  --env DISPLAY \
  alpine:3.19 sh -euxc 'apk add chromium; exec chromium --no-sandbox'

$ xhost -local:

ここからアクセスできないルート以外のプロセスを開始し、/root/.Xauthorityこれが失敗した理由であると推測できます。それでは、どのユーザーに?これにより、.Xauthorityすべての利害関係者に開示することができます。どのようにデバッグできますか?どのように機能させますか?

ベストアンサー1

chromium正確な答えではありませんが、rootではないユーザーで実行する方が合理的かもしれません。

$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/.Xauthority:ro \
  --env DISPLAY \
  alpine:3.19 \
  sh -euxc 'apk add chromium shadow
            useradd -m a
            cp .Xauthority /home/a
            chown a: /home/a/.Xauthority
            exec su - a -c "DISPLAY=\"$DISPLAY\" exec chromium --no-sandbox --no-first-run"'

または、より良い方法は次のとおりです(PID 1000で実行されていると仮定します)。

Dockerfile:

FROM alpine:3.19
RUN apk add chromium shadow && useradd -m a
$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/home/a/.Xauthority:ro \
  --env DISPLAY \
  -u 1000 \
  i chromium --no-sandbox --no-first-run

または使用chromiumseccomp 構成ファイル(2016年に作成されました)以下を回避できます--no-sandbox

$ curl -O https://raw.githubusercontent.com/jessfraz/dotfiles/master/etc/docker/seccomp/chrome.json
$ docker run --rm -it --network host \
  --volume ~/.Xauthority:/home/a/.Xauthority:ro \
  --env DISPLAY \
  -u 1000 \
  --security-opt seccomp=chrome.json \
  i chromium --no-first-run

seccomp 構成ファイルは、以下から取得されます。これら 回答、これは説明するそれがどのように生成されるか。

おすすめ記事