docker kapsayıcı ssl sertifikaları


88

Docker pull'dan gelen görüntülere ssl sertifikaları eklemenin zarif bir yolu var mı?

/ Etc / ssl / certs içine dosya eklemenin ve update-ca-sertifikalarını çalıştırmanın basit ve tekrarlanabilir bir yolunu arıyorum. (Bu, ubuntu ve debian görüntülerini kapsamalıdır).

CoreOS üzerinde docker kullanıyorum ve coreos makinesi gerekli ssl sertifikalarına güveniyor, ancak docker container'larının sadece varsayılanları var.

Daha docker run --entrypoint=/bin/bashsonra sertifikayı eklemeyi ve çalıştırmayı denedim update-ca-certificates, ancak bu, giriş noktasını kalıcı olarak geçersiz kılıyor gibi görünüyor.

Ayrıca şimdi merak ediyorum, sadece /etc/ssl/certsana makine kopyasından konteynere monte etmek daha zarif olur mu? Bunu yapmak, kapsayıcıların ana bilgisayarla aynı şeylere güvenmesine dolaylı olarak izin verir.

Her şeyden vazgeçen sinir bozucu bir proxy ile işteyim :(. SSL'yi bozan ve kapsayıcılarla çalışmayı biraz tuhaf yapan.


3
Görüntünüzü kullanacak, dosyayı ekleyecek ve update-ca-sertifikaları çalıştıracak bir Dockerfile oluşturmayı düşündünüz mü? yoksa aradığınız bu değil mi?
Céline Aussourd

Bunu bazı görüntüler için yaptım. Bu kötü bir çözüm değil. Yine de tüm görüntüleri kendi başınıza oluşturmanızı gerektirir.
Beau Trepp

Yanıtlar:


75

Sertifikaları aşağıdakileri kullanarak Docker konteynerine ekleyin -v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
Bu oldukça şık. Kapsayıcı aynı ssl_certs stilini kullanıyorsa, update-ca-sertifikaları satırına bile ihtiyacınız olmaz, ana bilgisayar bunu zaten yapmış olurdu :).
Beau Trepp

2
ve bulutta inşa ediyorsak?
Ewoks

27

Buna benzer bir şey yapmaya çalışıyorum. Yukarıda açıkladığımız gibi, özel bir Dockerfile (temel görüntü olarak çektiğiniz görüntüyü kullanarak) ADD, o zaman sertifikanız ile yeni bir görüntü oluşturmak isteyeceğinizi düşünüyorum RUN update-ca-certificates. Bu şekilde, bu yeni görüntüden bir konteyneri her başlattığınızda tutarlı bir duruma sahip olacaksınız.

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

docker buildDockerfile'ın IMAGE_ID ürettiğine karşı bir diyelim. Daha sonra docker run -d [any other options] IMAGE_ID, bu komutla başlatılan kapsayıcı sertifika bilgilerinize sahip olacaktır. Basit ve tekrarlanabilir.


Genellikle diğer cevaplarda bahsedilen docker run -v çözümünü tercih ederim. Ancak çözümünüz, docker derlemesi sırasında sertifikalara ihtiyacınız olduğunda da çalışır. Teşekkürler!
bastian

10
Herhangi bir genel konteynere sertifika koymaktan çekinirim. Başka biri konteynırınızı çekip özel sertifikalarınızı çıkarabilir.
skibum55

4
Bu çok iyi bir nokta olsa da, yukarıdaki çözüm hiçbir şeyi halka açık hale getirmiyor. Bu, yerel olarak oluşturulan ve daha sonra özel olarak kullanılan bir görüntüye kendi sertifikalarınızı eklemek içindir. Sen olabilir sonra kamu deposuna çıkan görüntü itmek, ancak dediğim gibi bu kötü bir fikir olacaktır.
shudgston

9
Sertifikalar ne zamandan beri gizli?
techraf

4
Sunucunuzun yayınladığı sertifikayla eşleşmesi için özel bir anahtara ihtiyacı olduğu için.
John Rix

22

Yukarıdaki bir yorumda önerildiği gibi , ana bilgisayardaki sertifika deposu konukla uyumluysa, bunu doğrudan bağlayabilirsiniz.

Debian ana bilgisayarında (ve kapsayıcısında) başarıyla şunları yaptım:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

Peki, derleme sunucusunda Docker görüntüsü oluştururken ne yapmalı? : /
Ewoks

@Ewoks Sertifikalarınızı bazı özel DNS'lerde barındırabilir ve bunları dümen çizelgelerinize yükleyebilir ve kümenizdeki birimi oluşturmayı otomatikleştirebilirsiniz.
Bassam Gamal

2

Birimi konteynere monte etmek için göreli yolu kullanabilirsiniz:

docker run -v `pwd`/certs:/container/path/to/certs ...

pwdSize mevcut çalışma dizinini veren geri tik işaretine dikkat edin . certsGeçerli dizinde docker run, yürütüldüğü klasöre sahip olduğunuzu varsayar . Yerel geliştirme için harika ve sertifikalar klasörünü projeniz için görünür tutun.

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.