SORU
8 Mayıs 2014, PERŞEMBE


(En iyi) docker paylaşılan birimleri için izinleri yönetmek için yolu nedir

Bir süre docker ile oynamak oldum, ve sürekli veri ile uğraşırken aynı sorunu bulmaya devam.

Benim Dockerfile expose a volume oluşturmak veya mount a host folder inside my container 7 *kullanın

Benim sorum, izinleri ben ana bilgisayarda paylaşılan bir birim için geçerli bir şey mi? 2 seçenek düşünebilirsiniz:

  • Şimdiye kadar yapmaya çalıştım docker konteyner klasöre yazabilirim yani herkes okuma/yazma erişimi verin

  • Kabın içine bilgisayar kullanıcıları göster, daha ayrıntılı izinleri atayın. Bu mümkün olsa ve hakkında pek bir şey bulamadım. Şimdilik yapabileceğim tek şey bazı kullanıcı olarak konteyner çalıştırılır: docker run -i -t -user="myuser" postgres ama bu benim kullanıcı host izinleri çalışmıyor yani 9**, daha farklı bir UID vardır. Ayrıca, eğer kullanıcı eşleştirmesi bazı güvenlik riski teşkil eğer emin değilim.

Başka alternatifler?

Peki sizler bu konu ile ilgili?

CEVAP
19 Kasım 2014, ÇARŞAMBA


Bu data-only containers kullanarak çözmek için meşru bir yol olduğuna inanıyorum. Bu yaklaşım ile, birime erişim tüm veri ana uıd/gıd önemi yok yani -volumes-from veri kapsayıcı kullanan kaplar).

Örneğin, bir kullanma durumu belgelerinde belirli bir veri birimi destek veriyor. Bunu yapmak için başka bir kaba tar üzerinden yedekleme yapmak için kullanılır ve bu birim için -volumes-from kullanır. Sanırım kilit nokta için grok: yerine düşünme hakkında nasıl erişmek için veri ana uygun izinlere, nasıl düşünün için ne gerekiyorsa -- yedekleme, tarama, vb. başka bir kaba yoluyla. Konteynerler kendilerini tutarlı uıd/gıd kullanmanız gerekir, ama ana bilgisayarda bir şey için, böylece kalan taşınabilir göster ihtiyaçları yok.

Bu benim için oldukça yeni olarak iyi ama eğer belirli bir senaryo varsa yorum yapmaktan çekinmeyin ve cevap genişletmeye çalışacağım.

GÜNCELLEME: Daire şeklinde kullanma durumu için, bir görüntü some/graphite grafit ve görüntü veri konteyner olarak some/graphitedata koşmak zorunda kalabilirsin. Yani, bağlantı noktaları görmezden gelip, görüntü Dockerfile some/graphitedata bir şey gibi:

FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
  && useradd -r -g graphite graphite
RUN mkdir -p /data/graphite \
  && chown -R graphite:graphite /data/graphite
VOLUME /data/graphite
USER graphite
CMD ["echo", "Data container for graphite"]

Ve veri kapsayıcı oluşturmak oluşturmak:

docker build -t some/graphitedata Dockerfile
docker run --name graphitedata some/graphitedata

some/graphite Dockerfile da şöyle bir şey olabilir bu nedenle gids/aynı uıd almak gerekir:

FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
  && useradd -r -g graphite graphite
# ... graphite installation ...
VOLUME /data/graphite
USER graphite
CMD ["/bin/graphite"]

Ve aşağıdaki gibi çalıştırmak olacaktır

docker run --volumes-from=graphitedata some/graphite

Tamam, şimdi o verir bize grafit kap ve ilişkili veri-tek konteyner ile doğru kullanıcı/grup (not tekrar kullanma some/graphite konteyner için veri konteyner olarak, ağır basan entrypoing/cmd zaman çalışır, ama onları ayrı resimler IMO olduğunu daha net).

Şimdi, izin veri klasöründe bir şey düzenlemek istediğini söylüyor. Yani bağlama ana birim oluşturma ve düzenleme yerine, bu işi yapmak için yeni bir kapsayıcı oluşturun. Lets Ara 23**. Ayrıca uygun bir kullanıcı/grup, sadece some/graphite görüntü gibi oluşturmanızı sağlar.

FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
  && useradd -r -g graphite graphite
VOLUME /data/graphite
USER graphite
CMD ["/bin/bash"]

Sen-ebil yapmak bu KURU tarafından devralmasını some/graphite some/graphitedata Dockerfile, ya da yerine yeni bir imaj yaratmak sadece yeniden için varolan olanlar (öncelikli giriş/cmd gerekli).

Şimdi, sadece çalıştırın:

docker run -ti --rm --volumes-from=graphitedata some/graphitetools

ve sonra vi /data/graphite/whatever.txt. Bu kaplar uıd/gıd eşleştirme ile aynı grafit kullanıcı var çünkü mükemmel çalışıyor.

Hiç ana bilgisayardan /data/graphite mount beri, ana uıd/gıd graphite graphitetools konteynerler içinde tanımlanan/gıd haritalar uıd nasıl umurunda değil. Bu kaplar artık herhangi bir ana bilgisayara dağıtılabilir ve mükemmel bir şekilde çalışmaya devam edecek.

Bu konuda düzgün bir şey graphitetools yararlı programları ve komut dosyaları her türden olabilir, şimdi de taşınabilir bir şekilde dağıtabilirsiniz.

GÜNCELLEME 2Bu cevap yazdıktan sonra, bu yaklaşım hakkında more complete blog post bir yazmaya karar verdim. Yardımcı olur umarım.

GÜNCELLEME 3Bu cevap düzelttim ve daha fazla özellikleri eklendi. Daha önce mülkiyeti ile ilgili bazı yanlış varsayımlar bulunan ve mülkiyeti genellikle birim oluşturulduğunda, çünkü bu veri kap yani birim oluşturma zamanda atanır perma. this blog bkz. Bu bir gereklilik değil ama ... sadece veri konteyner olarak bir "başvuru/işlemek" ve set sahipliği/perma başka bir kaba) chown bir giriş noktası, olan biten gosu Çalıştır komutu olarak doğru kullanıcı. Eğer herkes bu yaklaşım içinde ilgilenen varsa, lütfen yorum ve bir örnek bu yaklaşım kullanarak bağlantılar sağlayabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HSmasteryoda .

    HSmasteryoda

    22 Ocak 2010
  • karneson

    karneson

    23 Temmuz 2006
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009