ฉันกำลังเรียกใช้ chromedriver + chrome ภายใน Docker ในสภาพแวดล้อมการทดสอบของฉัน
ทุกอย่างทำงานได้ดีจนกระทั่ง CoreOS อัพเกรดล่าสุด
เหล่านี้เป็นรุ่นที่ดูเหมือนจะใช้งานได้:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
และนี่เป็นเวอร์ชั่นใหม่ที่ทำให้โครเมี่ยมเป็น Coredump:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
เมื่อดูการเปลี่ยนแปลงดูเหมือนว่านักเทียบท่าได้รับการอัปเกรดจาก 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
- Chrome ทำงานตามที่คาดไว้
ความแตกต่างระหว่างสวิตช์ทั้งสองนั้นคืออะไร? ความสามารถในสิ่งที่มีการใช้งานโดย--privileged
?
และฉันสามารถอนุญาตsetns()
ภายในคอนเทนเนอร์โดยไม่ลดทอนความปลอดภัย