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!