Mümkünse, Docker'ı Docker (aka dind ) içinde çalıştırmaktan kaçınılmalıdır. (Kaynak aşağıda verilmiştir.) Bunun yerine, ana kapsayıcınızın kardeş kapları üretmesi ve onlarla iletişim kurması için bir yol ayarlamak istersiniz .
Docker'ın bir Docker konteynerinin içinde çalışmasını mümkün kılan özelliğin yazarı Jérôme Petazzoni , aslında yapmamak için bir blog yazısı yazdı . Açıkladığı kullanım durumu, OP'nin diğer Docker kapları içinde işleri yürütmesi gereken bir CI Docker kapsayıcısının tam kullanım durumu ile eşleşir.
Petazzoni, dind'in zahmetli olmasının iki nedenini listeler:
- Linux Güvenlik Modülleri (LSM) ile iyi işbirliği yapmaz.
- Ana kaplarda oluşturulan kaplar için sorun yaratan dosya sistemlerinde bir uyumsuzluk oluşturur.
Bu blog gönderisinden aşağıdaki alternatifi açıklıyor,
[En basit] Docker soketini -v
bayrakla bağlayarak CI konteynırınıza maruz bırakmaktır .
Basitçe söylemek gerekirse, Docker-in-Docker ile birlikte bir şey kesmek yerine CI kabınızı (Jenkins veya diğer) başlattığınızda aşağıdakilerle başlayın:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
Şimdi bu kapsayıcı Docker soketine erişebilecek ve bu nedenle kapsayıcıları başlatabilecek. Dışında "alt" kapsayıcılar başlatmak yerine, "kardeş" kaplar başlayacak.