Saya menjalankan chromedriver + chrome di dalam Docker di lingkungan pengujian saya.
Semuanya bekerja dengan baik sampai upgrade CoreOS terbaru.
Ini adalah versi yang sepertinya berfungsi:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
Dan ini versi yang lebih baru yang menyebabkan chrome untuk coredump:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Melihat perubahan, tampaknya buruh pelabuhan ditingkatkan dari 1,11.x ke 1,12.x, yang memutuskan setns()
panggilan di dalam wadah. setns()
digunakan oleh Chrome untuk membuat ruang nama.
Ini adalah contoh output:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Dari dalam satu wadah di kotak ini:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Ini adalah bagaimana versi baru memecahkannya:
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)
Apa yang saya temukan adalah bahwa jika saya memulai wadah dengan salah satu --cap-add=SYS_ADMIN
atau --privileged
- Chrome berfungsi seperti yang diharapkan.
Apa perbedaan antara kedua sakelar itu? Kemampuan apa yang diaktifkan oleh --privileged
?
Dan, bisakah saya mengizinkan setns()
di dalam wadah tanpa mengorbankan keamanan?