मैं अपने परीक्षण वातावरण में डॉकर के अंदर क्रोमेड्रिवर + क्रोम चला रहा हूं।
नवीनतम कोरओएस अपग्रेड तक सब कुछ ठीक काम कर रहा था।
ये वे संस्करण हैं जो काम करने लगते हैं:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
और यह एक नया संस्करण है जो क्रोम से कोरपम्प का कारण बनता है:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
परिवर्तनों को देखते हुए, ऐसा लगता है कि docker को 1.11.x से 1.12.x में अपग्रेड किया गया, जिसने setns()
कंटेनर के अंदर कॉल को तोड़ दिया । setns()
Chrome द्वारा नाम स्थान बनाने के लिए उपयोग किया जाता है।
यह उदाहरण आउटपुट हैं:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
इस बॉक्स पर एक कंटेनर के अंदर से:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
इस तरह नए संस्करण ने इसे तोड़ दिया:
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)
मुझे जो पता चला है वह यह है कि अगर मैं कंटेनर को या तो शुरू करता हूं --cap-add=SYS_ADMIN
या --privileged
- क्रोम अपेक्षा के अनुरूप काम करता है।
उन दो स्विच में क्या अंतर है? कौन सी क्षमताएं सक्षम हैं --privileged
?
और, क्या मैं setns()
सुरक्षा से समझौता किए बिना कंटेनर के अंदर अनुमति दे सकता हूं ?