`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정확한 대답은 아니지만 루트가 아닌 사용자에서 실행하는 것이 더 합리적일 수 있습니다.

$ 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 구성 파일은 다음에서 가져옵니다.이것들 답변,이것은설명하다그것이 어떻게 생성되는지.

관련 정보