Cách chạy Chromium từ thùng chứa docker


9

Môi trường

  • MacOS Sierra 10.12.6
  • Docker phiên bản 17.09.0-ce, xây dựng afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

Tôi muốn mở trình duyệt Chromium từ bộ chứa docker trên máy tính để bàn Mac của tôi.

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

Cam kết

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

Chạy trình duyệt crom myusertừ FAIL container

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

Tôi cá là có thêm một chút cho nó

Bất kỳ con trỏ?

UDPATE - sử dụng --privileged

Xóa lỗi Xem chủ đề trên serverfault nhưng UI không hiển thị

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

và cái này nữa

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 không xuất hiện

CẬP NHẬT 20171011

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

Bắt đầu Gtk: cannot open display: [...] org.macosforge.xquartz:0 lỗi 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

Trên máy Mac của tôi đã chỉnh sửa sshd_config

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

Trên máy Mac của tôi DISPLAY

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

Trên đĩa

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
Bạn đã đến bất cứ nơi nào với điều này, @zabumba?
Damian Powell

Câu trả lời:


2

Nhu cầu của bạn nhắc nhở tôi subuser . Nó đã được thiết kế để chạy ứng dụng người dùng cuối trong một container docker để bảo vệ sự riêng tư và tăng tính an toàn.


nhớ upvote câu hỏi. xem nếu người khác có thể giúp đỡ Tôi thích con trỏ của bạn để subuser. thật thú vị
zabumba

subusercó thể là "Qubes OS lite" mà tôi đang tìm kiếm! Cảm ơn!
Dave

1

Tôi không có máy Mac để thử nghiệm, nhưng đây là một số gợi ý chung:

X11 thường được bảo vệ bằng một tệp chính mà người dùng sở hữu màn hình chỉ có thể đọc được, do đó sử dụng các quyền của hệ thống tệp để xác nhận rằng chỉ những chương trình khác có thể đọc tệp đó mới có thể kết nối. Các máy khách đọc tệp đó và sau đó lặp lại nội dung của nó đến máy chủ thông qua ổ cắm. Vì vậy, tôi nghĩ rằng bạn đã đi đúng hướng với

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

Tiếp theo, bạn hiển thị cài đặt chuyển tiếp SSH X11 nhưng không có dấu hiệu cho thấy bạn ssh vào bộ chứa docker. Chuyển tiếp SSH thường được sử dụng bởi:

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

Để thực hiện điều này, bạn cần chạy một máy chủ SSH bên trong bộ chứa docker, đây là một chút nỗ lực ...

Tiếp theo, bạn hiển thị cái DISPLAY=/path/to/socketmà tôi chưa từng sử dụng trước đây. Nếu đây là một phát minh MacOS, thì Ubuntu được neo có thể không hiểu định dạng đó.

Cuối cùng, bạn có thể thấy chrome thực sự đang cố gắng làm gì bằng cách sử dụng lệnh 'strace' từ bên trong thùng chứa docker.

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

Điều đó có thể giúp bạn thu hẹp những hoạt động cụ thể thất bại ngay trước khi nó từ bỏ.


Tôi sẽ cho bạn tiền thưởng vì những gợi ý hay, nhưng tôi chưa giải quyết được vấn đề. Tôi sẽ tạo một tiền thưởng khác để xem nếu người khác có thể giúp đỡ. Cuối cùng cung cấp một Dockerfile. thx
zabumba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.