テスト環境のDocker内でchromedriver + chromeを実行しています。
最新のCoreOSアップグレードまで、すべてが正常に機能していました。
動作しているように見えるバージョンは次のとおりです。
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
そして、これはchromeをコアダンプさせる新しいバージョンです:
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
このボックスの1つのコンテナ内から:
[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の動作します。
これら2つのスイッチの違いは何ですか?どの機能が有効になってい--privileged
ますか?
また、setns()
セキュリティを損なうことなく内部コンテナを許可できますか?