환경

환경

환경

  • 맥OS 시에라 10.12.6
  • Docker 버전 17.09.0-ce, afdb6d4 빌드
  • 우분투16.04
  • 엑스쿼츠 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컨테이너에서 Chrome 브라우저 실행이 실패함

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

오류를 제거하다서버 오류에 대한 스레드를 참조하세요.하지만 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

크롬 시작 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

내 맥에서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=

답변1

당신의 필요가 나에게 상기시켜줍니다하위 사용자. 개인 정보를 보호하고 보안을 향상시키기 위해 Docker 컨테이너에서 최종 사용자 애플리케이션을 실행하도록 설계되었습니다.

답변2

실험할 Mac이 없지만 다음은 몇 가지 일반적인 제안 사항입니다.

X11은 일반적으로 모니터를 소유한 사용자만 읽을 수 있는 키 파일로 보호되므로 파일 시스템 권한은 파일을 읽을 수 있는 다른 프로그램만 연결할 수 있다고 주장하는 데 사용됩니다. 클라이언트는 파일을 읽고 그 내용을 소켓을 통해 서버에 반복합니다. 그럼 네 말이 맞는 것 같아.

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

다음으로 SSH X11 전달 설정을 표시하지만 Docker 컨테이너에 SSH로 접속하라는 지시는 없습니다. SSH 전달은 일반적으로 다음 용도로 사용됩니다.

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

그러기 위해서는 도커 컨테이너 내부에서 SSH 서버를 실행해야 하는데, 여기에는 약간의 노력이 필요합니다.

다음으로 DISPLAY=/path/to/socket제가 이전에 사용하지 않은 것을 보여드리겠습니다. 이것이 MacOS 발명이라면 Dockerized Ubuntu가 형식을 이해하지 못할 수도 있습니다.

마지막으로 docker 컨테이너 내에서 "strace" 명령을 사용하여 Chrome이 실제로 무엇을 하려고 하는지 확인할 수 있습니다.

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

이는 포기하기 전에 실패한 특정 작업의 범위를 좁히는 데 도움이 될 수 있습니다.

관련 정보