У моєму тестовому середовищі я запускаю хромодрук + хром всередині Docker.
До останнього оновлення CoreOS все працювало чудово.
Ось такі версії, які, здається, працюють:
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
З огляду на зміни, здається, що докер був оновлений з 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()
всередині контейнера без шкоди для безпеки?