환경
- 맥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"
이는 포기하기 전에 실패한 특정 작업의 범위를 좁히는 데 도움이 될 수 있습니다.