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.