Docker altında Chrome: CAP_SYS_ADMIN mi yoksa ayrıcalıklı mı? [kapalı]


11

Test ortamımda Docker'ın içinde chromeriver + chrome kullanıyorum.

En son CoreOS yükseltmesine kadar her şey iyi çalışıyordu.

Bunlar işe yarayan sürümlerdir:

VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937

Ve bu, kromun çarpmasına neden olan daha yeni bir sürüm:

VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450

Değişikliklere bakıldığında, liman işçisinin 1.11.x sürümünden 1.12.x sürümüne yükseltildiği anlaşılıyor setns(). setns(), Chrome tarafından bir ad alanı oluşturmak için kullanılır.

Bu örnek çıktılar:

jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae

Bu kutudaki bir kabın içinden:

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:

Yeni sürüm böyle kırdı:

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)

Bulduğum şey, kapsayıcılardan birini --cap-add=SYS_ADMINveya --privileged- Chrome ile başlattığımda beklendiği gibi çalışıyor.

Bu iki anahtar arasındaki fark nedir? Hangi yetenekler etkinleştiriliyor --privileged?

Ve setns()güvenlikten ödün vermeden konteynerin içine izin verebilir miyim ?


Bunun için teşekkürler. Bir sürü şey kullanarak bir sorun çıkardım : github.com/docker/for-linux/issues/496 Sanırım düzeltilmeli
— Merc

Neredeyse 2 yıl geç kaldım, ancak hala ilgileniyorsanız yukarıdaki bilette çok daha iyi ve daha güvenli bir çözüm var.
— Merc

Orijinal poster cevabı güncellemiyorsa (SO'da hiç aktif görünmüyorsa), farklı bir tane kabul edip etmeyeceğinizi bize bildirin. Bunu saatlerce boşa harcadım, sadece başka insanları kaç saat kurtaracağımızı hayal edebiliyorum.
— Merc

Yanıtlar:


7

AFAICS, dokümantasyonda , anahtarı kullanmak yerine, bir kap için gereken yeteneklerin verilmesini önerir--privileged . Ayrıcalıklı modunda Koşu vermek görünüyor tüm yetenekleri kabı (docs güncel olması koşuluyla aynen ilk URL'ye listelenen olanlar hangi).

Kısacası, anahtara --cap-add=SYS_ADMINkıyasla konteynere daha küçük bir yetenek alt kümesi verdiğini söyleyebilirim --privileged. Etkinlik, Docker belgelerindeki (ilk URL) örneklerin yalnızca gerektiğinde SYS_ADMINveya NET_ADMINözelliğini eklemeyi tercih ettiği görülüyor .


Teşekkürler, exec_linux.goyardımcı oldu. Ben grep için docker repo klonlama denedim ama bana birkaç saat sürdü beri sadece unuttum :)
— Jakov Sosic

Sadece Chrome'u çalıştırmak için burada listelenen çok daha iyi bir çözüm var: github.com/docker/for-linux/issues/496#issuecomment-441149510 İnsanların açıkladığım şeyi yapması için cevabı güncellemenin çok yararlı olacağını düşünüyorum bu çok yorum. Kabul ederseniz lütfen bana bildirin.
— Merc

1

Bir fark - ayrıcalıklı / dev ve / sys RW olarak bağlanır, SYS_ADMIN olarak RO olarak bağlanır. Bu, ayrıcalıklı bir kapsayıcıdaki sistemdeki aygıtlara tam erişime sahip olduğu anlamına gelir. SYS_ADMIN bunu vermiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.