วิธีการเรียกใช้ Chromium จากคอนเทนเนอร์นักเทียบท่า


9

สิ่งแวดล้อม

  • MacOS Sierra 10.12.6
  • นักเทียบท่ารุ่น 17.09.0-ce, สร้าง afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

ฉันต้องการเปิดเบราว์เซอร์ Chromium จากที่เก็บข้อมูลบนเดสก์ท็อป Mac

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

ลบข้อผิดพลาดดูเธรดบนเซิร์ฟเวอร์ข้อผิดพลาดแต่ 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

Chromium ไม่แสดงขึ้น

อัพเดท 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

$ 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=

1
คุณมาที่นี่ด้วย @zabumba ไหม?
Damian Powell

คำตอบ:


2

ความต้องการของคุณทำให้ผมนึกถึงsubuser มันได้รับการออกแบบให้ใช้แอพพลิเคชั่นสำหรับผู้ใช้ปลายทางในตู้เทียบท่าเพื่อปกป้องความเป็นส่วนตัวและเพิ่มความปลอดภัย


อย่าลืมโหวตคำถาม ดูว่าคนอื่นอาจช่วยได้หรือไม่ ฉันชอบตัวชี้ของคุณถึงผู้ใช้ย่อย นั่นน่าสนใจ
zabumba

subuserอาจเป็น "Qubes OS lite" ที่ฉันกำลังมองหา! ขอบคุณ!
เดฟ

1

ฉันไม่มี Mac ที่จะทดลองด้วย แต่นี่เป็นคำแนะนำทั่วไป:

โดยปกติ X11 จะได้รับการป้องกันด้วยไฟล์คีย์ซึ่งผู้ใช้ที่เป็นเจ้าของจอแสดงผลสามารถอ่านได้เท่านั้นดังนั้นการใช้สิทธิ์ระบบไฟล์เพื่อยืนยันว่ามีเพียงโปรแกรมอื่นที่สามารถอ่านไฟล์นั้นได้เท่านั้นที่สามารถเชื่อมต่อได้ ไคลเอนต์อ่านไฟล์นั้นแล้วทำซ้ำเนื้อหาไปยังเซิร์ฟเวอร์ผ่านซ็อกเก็ต ดังนั้นฉันคิดว่าคุณอยู่ในเส้นทางที่ถูกต้องด้วย

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

ถัดไปคุณจะแสดงการตั้งค่าการส่งต่อ SSH X11 แต่ไม่มีการบ่งชี้ว่าคุณ ssh ลงในคอนเทนเนอร์ docker การส่งต่อ SSH มักจะถูกใช้โดย:

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

ในการทำเช่นนี้คุณจะต้องเรียกใช้เซิร์ฟเวอร์ SSH ภายในคอนเทนเนอร์นักเทียบท่าซึ่งใช้ความพยายามเล็กน้อย ...

ต่อไปคุณจะแสดงสิ่งDISPLAY=/path/to/socketที่ฉันไม่ได้ใช้มาก่อน หากนี่เป็นสิ่งประดิษฐ์ MacOS แสดงว่า Ubuntu ที่เชื่อมต่อแล้วอาจไม่เข้าใจรูปแบบดังกล่าว

ในที่สุดคุณสามารถดูได้ว่าโครเมี่ยมใดที่พยายามใช้คำสั่ง 'strace' จากภายในคอนเทนเนอร์นักเทียบท่า

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

ซึ่งอาจช่วยให้คุณ จำกัด การปฏิบัติการเฉพาะที่ล้มเหลวก่อนที่จะยอมแพ้


ฉันจะให้รางวัลแก่คุณเพราะพอยน์เตอร์ที่ดี แต่ฉันไม่ได้แก้ปัญหา ฉันจะสร้างเงินรางวัลอีกหนึ่งค่าเพื่อดูว่ามีใครสามารถช่วยได้บ้าง ในที่สุดก็ให้กับ Dockerfile ขอบคุณ
zabumba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.