Liman işçisi depolama geçişi sorununun geçmişi (liman işçisi kökü)

Birkaç günden daha kısa bir süre önce, sunuculardan birinde docker depolama biriminin (docker'ın tüm kapsayıcı ve görüntü dosyalarını depoladığı dizin) ayrı bir bölüme taşınmasına karar verildi.
daha büyük kapasiteye sahipti. Görev önemsiz görünüyordu ve bir sorun olacağının habercisi değildi...

Devam edelim:

1. Uygulamamızın tüm kapsayıcılarını durdurun ve sonlandırın:

docker-compose down

çok sayıda kap varsa ve farklı bileşimlerdeyse şunu yapabilirsiniz:

docker rm -f $(docker ps -q)

2. Docker arka plan programını durdurun:

systemctl stop docker

3. Dizini istediğiniz konuma taşıyın:

cp -r /var/lib/docker /docker/data/storage

4. Docker daemon'a yeni dizine bakmasını söylüyoruz. Birkaç seçenek vardır: arka plan programını yeni bir yola yönlendirmek için -g bayrağını kullanın veya kullandığımız systemd yapılandırmalarını kullanın. Veya bir sembolik bağlantı. Bu konuda fazla detaya girmeyeceğim, internette var. dolu Liman işçisi kökünü yeni bir konuma taşımaya ilişkin kılavuzlar.

5. Docker arka plan programını başlatın ve doğru yerde göründüğünden emin olun:

systemctl status docker

Çıkış satırlarından birinde şunları görmeliyiz:

├─19493 /usr/bin/dockerd --data-root=/docker/data/storage

Seçeneğin arka plan programına aktarıldığından emin olduk, şimdi uygulayıp uygulamadığını kontrol edelim (teşekkürler) mürekkepvizitor68sl)!

docker info | awk '/Root Dir/ {print $NF}' 

6. Uygulamamıza başlayalım:

docker-compose up -d

7. Kontrol edin

Ve işte eğlence başlıyor, DBMS, MQ, her şey yolunda! Veritabanı sağlam, her şey çalışıyor... nginx dışında. Kerberos ve fahişelerle kendi nginx yapımız var. Konteyner günlüklerinin görüntülenmesi, /var/tmp dosyasına yazılamadığını gösterdi - İzin reddedildi. Şakaklarımı parmaklarımla yoğurup durumu analiz etmeye çalışıyorum... Bu nasıl mümkün olabilir? Docker görüntüsü değişmedi. Dizini yeni taşıdık. Her zaman işe yaradı ve işte size... Deney amacıyla, ellerimle kabın içine girdim ve bu dizinin haklarını değiştirdim, orada kök, kök 755, verilmiş kök, kök 777. Ve her şey başladı... Kafamda bir düşünce belirmeye başladı - bir çeşit saçmalık... Düşündüm ki, belki de bir şeyi hesaba katmamışımdır...

Aktarım sırasında dosyalara erişim haklarına aşık olduğumuza karar verdim. Uygulamayı, docker arka plan programını durdurduk, yeni dizini sildik ve /var/lib/docker dizinini kullanarak kopyaladık. rsync -a.

Artık her şeyin yolunda olduğunu düşünüyorum, Docker uygulamasını yükseltelim.

Vee... sorun devam etti... Gözüm seğirdi. Sanal makinemin konsoluna koştum, burada çeşitli testler yaptım, elimde bu nginx görüntüsü vardı ve konteynerin içine tırmandım ve burada /var/tmp dizininin hakları root, root 777. manuel olarak ayarlamak zorunda kaldığım gibi. Ama görüntüler aynı!

Xfs dosya sistemi her yerde kullanıldı.

komutunu kullanarak karşılaştırdım

docker inspect my-nginx:12345

Tüm karmalar aynıdır, hepsi bire birdir. Hem sunucuda hem de sanal makinemde. Yerel nginx görüntüsünü sildim ve birkaç nedenden dolayı aynı makinede bulunan kayıt defterinden tekrar aldım. Sorun yine aynı... Şimdi ikinci gözüm seğiriyor.

Artık “AAAAAAAA” diye bağırmak ve diğer şeyler dışında kafamda hangi düşüncelerin olduğunu hatırlamıyorum. Saat sabahın 4'üydü ve görüntü katmanlarının karma işlemi ilkesini anlamak için Docker kaynak kodu kullanıldı. Enerji içeceğinin üçüncü kutusunu açtım. Ve sonunda karma işleminin yalnızca dosyayı ve içeriğini hesaba kattığını fark ettim, ancak ERİŞİM HAKLARINA ULAŞILAMAZ! Yani gizemli bir şekilde haklarımız kaybedildi, selinux devre dışı bırakıldı, acl kullanılmıyor ve yapışkan bit yok.

Yerel görüntüyü sildim, ayrıca görüntüyü liman işçisi kayıt defterinden de sildim ve tekrar aktardım. Ve her şey işe yaradı. Aktarım sırasında hem yerel görüntünün içinde hem de kayıt defterinde bulunan görüntünün içinde hakların kaybolduğu ortaya çıktı. Daha önce de söylediğim gibi, çeşitli nedenlerden dolayı aynı arabada bulunuyordu. Ve sonuç olarak, tek bir dizinde /var/lib/docker.

Ve liman işçisinin bakışlarını eski dizine döndürmeye çalışıp çalışmadıkları sorusunu tahmin ederek - hayır, denemediler, ne yazık ki koşullar buna izin vermedi. Evet ve bunu gerçekten çözmeyi istedim.

Bu makaleyi yazdıktan sonra sorunun çözümü bana açık görünüyor, ancak analiz sırasında öyle görünmüyordu. Dürüst olmak gerekirse, Google'da aradım ve benzer durumlar bulamadım.

Sonuç: Sorunu çözdüm sebebini hala anlamadım =(

Bu sorunun olası nedenleri hakkında bilgisi olan, tahmin eden veya vizyonu olan varsa, yorumlarınızda sizden haber almaktan son derece memnun olacağım!

Kaynak: habr.com

Yorum ekle