Tôi đang chạy chromedriver + chrome bên trong Docker trong môi trường thử nghiệm của mình.
Mọi thứ đều hoạt động tốt cho đến khi nâng cấp CoreOS mới nhất.
Đây là những phiên bản có vẻ hoạt động:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
Và đây là phiên bản mới hơn khiến chrome bị coredump:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Nhìn vào các thay đổi, có vẻ như docker đã được nâng cấp từ 1.11.x lên 1.12.x, đã phá vỡ setns()
cuộc gọi bên trong container. setns()
được Chrome sử dụng để tạo không gian tên.
Đây là kết quả đầu ra mẫu:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Từ bên trong một container trên hộp này:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Đây là cách phiên bản mới phá vỡ nó:
jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead
[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
Network namespace supported,
but failed: errno = Operation not permitted
Aborted (core dumped)
Những gì tôi đã phát hiện ra là nếu tôi khởi động bộ chứa bằng --cap-add=SYS_ADMIN
hoặc --privileged
- Chrome hoạt động như mong đợi.
Sự khác biệt giữa hai công tắc là gì? Những khả năng được kích hoạt bởi --privileged
?
Và, tôi có thể cho phép setns()
bên trong container mà không ảnh hưởng đến an ninh không?