Я запускаю chromedriver + chrome внутри Docker в своей тестовой среде.
Все работало нормально до последнего обновления CoreOS.
Это версии, которые, похоже, работают:
VERSION=1185.5.0VERSION_ID=1185.5.0BUILD_ID=2016-12-07-0937И это более новая версия, которая заставляет chrome выполнять coredump:
VERSION=1235.4.0VERSION_ID=1235.4.0BUILD_ID=2017-01-04-0450Глядя на изменения, кажется, что docker был обновлен с 1.11.x до 1.12.x, что сломало setns() вызов внутри контейнера. setns() используется Chrome для создания пространств имен.
Это пример выходных данных:
jsosic-coreos-test-20161207 ~ # docker --versionDocker 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 --versionDocker version 1.12.3, build 34a2ead[root@13ab34c36c82 /]# /opt/google/chrome/chromeFailed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permittedAborted (core dumped)Что я выяснил, так это то, что если я начну контейнер с любого --cap-add=SYS_ADMIN или --privileged - Chrome работает так, как ожидалось.
В чем разница между этими двумя переключателями? Какие возможности доступны с помощью --privileged?
И могу ли я позволить setns() внутри контейнера без ущерба для безопасности?