[unix] 도커 컨테이너에서 Chromium을 실행하는 방법

환경

  • 맥 OS 시에라 10.12.6
  • Docker 버전 17.09.0-ce, 빌드 afdb6d4
  • 우분투 16.04
  • X 쿼츠 2.7.9

Docker 컨테이너에서 Mac 데스크톱으로 Chromium 브라우저를 열고 싶습니다.

docker run -i -t ubuntu:16.04 /bin/bash
apt-get update
apt-get install alsa-base chromium-browser xauth
adduser myuser

범하다

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

myuser컨테이너 FAIL에서 와 같이 크롬 브라우저 실행

docker run --user myuser -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

나는 그것에 조금 더 내기

어떤 포인터?

UDPATE-사용 --privileged

오류를 제거합니다 serverfault의 스레드 참조 하지만 UI가 표시되지 않습니다

docker run \
       --privileged \
       --user mysuer \
       -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

그리고 이것

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix:/tmp/.X11-unix \
   -e DISPLAY=$DISPLAY \
   -e XAUTHORITY=/.Xauthority \
   -v ~/.Xauthority:/.Xauthority:ro \
   --name chromium \
   --user mysuser \
   -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

크롬이 표시되지 않습니다

20171011 업데이트

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix \
   -e DISPLAY \
   --name chromium \
   --user myuser \
   -i -t acme/mycontainer:0.1 \
   bash

Chromium Gtk: cannot open display: [...] org.macosforge.xquartz:0 오류 시작

$ chromium-browser --verbose
[37:37:1011/154632.348303:VERBOSE1:breakpad_linux.cc(1978)] Breakpad disabled
[1:1:1011/154632.378280:VERBOSE1:zygote_main_linux.cc(537)] ZygoteMain: initializing 0 fork delegates
[1:1:1011/154632.378653:INFO:cpu_info.cc(50)] Available number of cores: 4
[37:37:1011/154632.381303:WARNING:browser_main_loop.cc(275)] Gtk: cannot open display: \
      /private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

내 Mac에서 편집 sshd_config

sudo vim /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
XAuthLocation /opt/X11/bin/xauth

내 Mac에서 DISPLAY

$ env | grep DISPLAY
DISPLAY=/private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

디스크에

ls -al /private/tmp/com.apple.launchd.gCYQToI4lb/*
srw-rw-rw-  1 joel  wheel     0B Oct 11 17:50
/private/tmp/com.apple.launchd.gCYQToI4lb/org.macosforge.xquartz:0=



답변

당신의 필요는 저에게 하위 사용자를 상기시킵니다 . 개인 정보를 보호하고 안전성을 높이기 위해 도커 컨테이너에서 최종 사용자 응용 프로그램을 실행하도록 설계되었습니다.


답변

실험 할 Mac이 없지만 일반적인 제안 사항은 다음과 같습니다.

X11은 일반적으로 디스플레이를 소유 한 사용자 만 읽을 수있는 키 파일로 보호되므로 파일 시스템 권한을 사용하여 해당 파일을 읽을 수있는 다른 프로그램 만 연결할 수 있습니다. 클라이언트는 해당 파일을 읽은 다음 소켓을 통해 해당 내용을 서버에 반복합니다. 그래서, 당신이 올바른 길을 가고 있다고 생각합니다.

-e XAUTHORITY=/.Xauthority \
-v ~/.Xauthority:/.Xauthority:ro \

다음으로 SSH X11 전달 설정을 표시하지만 docker 컨테이너에 ssh한다는 표시는 없습니다. SSH 전달은 일반적으로 다음에 의해 사용됩니다.

ssh $HOST -X program-which-launches-gui

이렇게하려면 docker 컨테이너 내부에서 SSH 서버를 실행해야합니다.

다음으로 DISPLAY=/path/to/socket이전에 사용하지 않은 것을 표시합니다 . 이것이 MacOS 발명인 경우도 커화 된 우분투는 해당 형식을 이해하지 못할 수 있습니다.

마지막으로, docker 컨테이너 내부에서 ‘strace’명령을 사용하여 실제로 크롬이 시도하는 것을 볼 수 있습니다.

strace chromium-browser 2>&1 | egrep "open|stat|connect|bind"

이를 통해 포기하기 전에 특정 작업이 실패하는 범위를 좁힐 수 있습니다.


답변