Docker storage (docker root) histori masalah migrasi

Tidak lebih dari beberapa hari yang lalu diputuskan pada salah satu server untuk memindahkan penyimpanan buruh pelabuhan (direktori tempat buruh pelabuhan menyimpan semua file wadah, gambar) ke partisi terpisah, yang
memiliki kapasitas lebih. Tugas itu, tampaknya, sepele dan tidak menandakan masalah ...

Mulai:

1. Hentikan dan bunuh semua wadah aplikasi kita:

docker-compose down 

jika ada banyak wadah, dan mereka berada dalam komposisi yang berbeda, Anda dapat melakukan ini:

 docker rm -f $(docker ps -q) 

2. Hentikan daemon buruh pelabuhan:

 systemctl stop docker 

3. Pindahkan direktori ke lokasi yang diinginkan:

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

4. Kami memberi tahu iblis dari buruh pelabuhan untuk mencari di direktori baru. Ada beberapa opsi: gunakan flag -g untuk mengarahkan daemon ke path baru, atau konfigurasi systemd, yang kami gunakan. Nah, atau symlink. Saya tidak akan mengecatnya, Internet penuh dengan manual tentang porting root docker ke lokasi baru.

5. Kami memulai demon docker, dan melihat bahwa itu terlihat di mana seharusnya:

 systemctl status docker 

Di salah satu jalur output, kita akan melihat:
 β”œβ”€19493 /usr/bin/dockerd --data-root=/docker/data/storage 

Kami memastikan bahwa opsi tersebut diteruskan ke daemon, sekarang kami akan memeriksa apakah telah menerapkannya (terima kasih inkvizitor68sl )!
 docker info | awk '/Root Dir/ {print $NF}' 

6. Kami memulai aplikasi kami:
 docker-compose up -d 

7. Periksa

Dan di sini kesenangan dimulai, DBMS, MQ, semuanya baik-baik saja! Basisnya utuh, semuanya berfungsi ... kecuali untuk nginx. Kami memiliki perakitan nginx kami sendiri dengan kerberos dan pelacur . Dan melihat log kontainer menunjukkan bahwa ia tidak dapat menulis ke / var / tmp - Izin ditolak. Aku meregangkan jari-jariku dengan wiski dan mencoba menganalisis situasinya ... Bagaimana itu? Gambar buruh pelabuhan tidak berubah. Kami baru saja memindahkan direktori. Selalu berhasil, dan ini untuk Anda ... Demi percobaan, saya pergi ke wadah dengan pena dan mengubah hak untuk direktori ini, ada root, root 755 , beri root, root 777 . Dan semuanya dimulai ... Suatu pemikiran muncul di benak saya - semacam omong kosong ... Saya pikir, yah, mungkin saya tidak memperhitungkan sesuatu ...

Saya memutuskan bahwa kami menyukai hak akses ke file selama transfer. Mereka menghentikan aplikasi, daemon buruh pelabuhan, menghapus direktori baru dan membuat salinan direktori / var / lib / buruh pelabuhan menggunakan rsync -a sudah.

Saya pikir sekarang semuanya baik-baik saja, kami sedang menaikkan buruh pelabuhan, aplikasinya.

III ... masalahnya tetap ... Mataku berkedut. Saya bergegas ke konsol mesin virtual saya, di mana saya menjalankan berbagai tes, saya punya gambar nginx ini, dan saya naik ke dalam wadah, dan di sini root, root 777 hak ada di direktori / var / tmp. . Tapi gambarnya identik!

Di mana-mana digunakan FS xfs.

Saya membandingkan melalui perintah

 docker inspect my-nginx:12345 

Semua hash adalah identik, semua 1-1. Baik di server dan di virtualka saya. Saya menghapus gambar nginx lokal dan menggulung lagi dengan registri, yang karena beberapa alasan ada di mesin yang sama. Dan masalahnya sama ... Sekarang mata kedua saya bergerak-gerak.

Saya tidak ingat apa yang ada di pikiran saya, selain jeritan "AAAAAAA" dan hal-hal lain. Di jalan pada jam 4 pagi, sumber buruh pelabuhan digunakan untuk memahami prinsip hashing layer gambar. Dia membuka kaleng energi ketiga. Dan pada akhirnya, saya sadar bahwa hashing hanya memperhitungkan file, isinya, tapi BUKAN HAK AKSES ! Artinya, dalam beberapa cara misterius, hak dipukuli, dan selinux dinonaktifkan, acl tidak digunakan, sedikit lengket tidak ada.

Saya menghapus gambar lokal, juga menghapus gambar dari register buruh pelabuhan dan mulai lagi. Dan itu berhasil. Ternyata selama transfer hak-hak dipukuli, baik di dalam gambar lokal dan di dalam gambar yang terletak di registri. Seperti yang saya katakan, karena beberapa alasan, ia berada di mobil yang sama. Dan sebagai hasilnya dalam satu direktori / var / lib / docker.

Dan mengantisipasi pertanyaan apakah mereka mencoba mengembalikan pandangan buruh pelabuhan ke katalog lama - tidak, mereka tidak, sayangnya, keadaan tidak memungkinkan. Ya, dan benar-benar ingin mengetahuinya.

Setelah menulis artikel ini, solusi untuk masalah tersebut tampak jelas bagi saya, tetapi pada saat analisis sepertinya tidak begitu. Saya jujur ​​googled, dan tidak menemukan situasi yang sama.

Intinya: Saya memecahkan masalah, saya tidak mengerti alasannya = (

Jika seseorang tahu / menebak / memiliki visi tentang kemungkinan penyebab masalah ini - saya akan sangat senang melihat Anda di komentar!

Source: https://habr.com/ru/post/id462013/


All Articles