Untuk memulihkan volume bernama Docker Compose di macOS, hentikan layanan yang menulis ke volume tersebut, identifikasi nama volume Docker yang tepat, dan ekstrak arsip cadangan ke dalam volume tersebut menggunakan kontainer sementara. Docker Desktop menyimpan volume Linux di dalam VM Linux miliknya, jadi gunakan Docker CLI untuk mengaksesnya alih-alih mencoba mengedit file internal Docker di Finder. Panduan volume Docker menjelaskan metode pemulihan berbasis kontainer, dan ringkasan jaringan Docker Desktop mendeskripsikan VM Linux yang digunakan di Mac.
Sebelum Anda memulihkan: periksa arsip dan proyek Compose
Pastikan Docker Desktop sedang berjalan, lalu buka Terminal dan berpindahlah ke direktori yang berisi file Compose Anda. Temukan arsip di Finder, atau konfirmasikan namanya di Terminal. Contoh di bawah ini mengasumsikan file tersebut bernama backup.tar di dalam folder bernama backup-files; sesuaikan nilai-nilai tersebut dengan file Anda.
Periksa isi arsip sebelum mengekstraknya. Langkah ini membantu Anda memastikan apakah file disimpan langsung di akar (root) arsip atau di bawah direktori induk seperti data/.
tar -tf "$HOME/backup-files/backup.tar" | head -30
Perintah head membatasi tampilan daftar hanya untuk 30 jalur pertama; perintah ini tidak mengubah arsip. Perhatikan apakah jalur dimulai dengan awalan direktori. Anda perlu mengekstrak tingkat yang tepat ke dalam direktori data aplikasi. Contoh yang terdokumentasi di Docker menggunakan --strip 1 karena arsipnya berisi direktori tingkat atas; jangan gunakan opsi tersebut secara otomatis jika arsip Anda tidak memiliki awalan semacam itu. Contoh pemulihan Docker menunjukkan bagaimana jalur ekstraksi memengaruhi tata letak hasil pemulihan.
Mengidentifikasi nama volume yang tepat
Kunci volume Compose seperti db-data mungkin bukan nama lengkap dari volume Docker tersebut. Compose umumnya menambahkan awalan nama proyek, tetapi volume yang dikonfigurasi dengan name: atau external: true dapat menggunakan nama lain. Referensi volume Compose menjelaskan opsi-opsi penamaan tersebut.
Buat daftar volume dan periksa konfigurasi Compose untuk menentukan volume mana yang digunakan oleh layanan Anda:
docker volume ls
docker compose config
Dalam konfigurasi Compose yang dirender, temukan pemetaan volume layanan dan nama volume yang telah diselesaikan. Jika Anda perlu memeriksa salah satu kandidat, jalankan docker volume inspect VOLUME_NAME, ganti VOLUME_NAME dengan nama yang sebenarnya. Pastikan volume tersebut milik proyek dan layanan yang dimaksud sebelum melanjutkan; memulihkan ke volume yang salah dapat menimpa data yang tidak terkait.
Hentikan proses penulisan dan pulihkan cadangan
Hentikan layanan Compose sebelum memulihkan agar aplikasi tidak mengubah file selama proses ekstraksi. Menjalankan docker compose down akan menghentikan dan menghapus kontainer serta jaringan proyek; secara default, perintah ini tetap mempertahankan volume bernama. Hindari menambahkan opsi -v atau --volumes, yang akan menghapus volume bernama yang dikelola Compose. Referensi compose down Docker mencantumkan perilaku ini.
docker compose down
Atur variabel shell ke nama volume tepat yang telah Anda konfirmasi, lalu ekstrak arsip menggunakan kontainer sementara. Contoh ini menggunakan citra resmi alpine, memasang (mount) folder cadangan sebagai hanya-baca (read-only), dan memasang volume target di /restore. Ganti myproject_db-data jika nama Anda yang sebenarnya berbeda. Citra tersebut harus tersedia secara lokal atau Docker harus dapat mengunduhnya (pull).
VOLUME_NAME='myproject_db-data'
BACKUP_DIR="$HOME/backup-files"
docker run --rm \
--mount "type=volume,source=$VOLUME_NAME,target=/restore" \
--mount "type=bind,source=$BACKUP_DIR,target=/backup,readonly" \
alpine sh -c 'cd /restore && tar -xf /backup/backup.tar --strip-components=1'
Perintah ini mengasumsikan arsip memiliki satu tingkat direktori pembungkus, misalnya data/file.db. Jika daftar isi arsip memperlihatkan file langsung berada di akarnya, hapus --strip-components=1. Jika jalur memiliki awalan bersama yang berbeda, tentukan jumlah komponen yang akan dihapus agar file yang dibutuhkan aplikasi berada tepat di bawah /restore. Sintaks --mount secara eksplisit memasang volume bernama dan direktori host; Docker mendokumentasikan opsi-opsi pemasangan ini serta pola pemulihan dalam panduan volume-nya.
Ekstraksi akan menggantikan file dengan jalur yang cocok, tetapi tidak akan menghapus file tak terkait yang sudah ada di dalam volume. Jika Anda memerlukan salinan yang persis sama dengan cadangan, ekstraksi bergaya penggabungan (merge) tidaklah cukup: pertama-tama buatlah cadangan terpisah dari volume saat ini, lalu jalankan prosedur pembersihan secara terencana setelah mengonfirmasi arsip dan target. Jangan menjalankan perintah penghapusan berskala luas terhadap volume yang belum Anda identifikasi dengan pasti.
Mulai proyek dan periksa hasilnya
Jalankan kembali layanan Compose:
docker compose up -d
Compose akan menggunakan kembali volume yang sudah ada yang dideklarasikan dalam proyek, atau membuatnya jika belum ada. Referensi volume Compose mendokumentasikan perilaku tersebut. Periksa log layanan dan, jika memungkinkan, gunakan pemeriksaan integritas atau pemulihan basis data bawaan aplikasi. Pastikan catatan atau file yang diharapkan ada sebelum menganggap pemulihan selesai.
Jika layanan melaporkan direktori data kosong, periksa kembali nama volume, jalur direktori host, dan struktur direktori arsip. Verifikasi juga bahwa arsip tersebut kompatibel dengan versi aplikasi dan pencadangannya dilakukan dalam status yang dapat dipulihkan oleh aplikasi. Keberhasilan ekstraksi tar hanya mengonfirmasi bahwa file telah dibongkar; hal itu tidak memastikan bahwa data aplikasi valid.
Sumber
Volumes — Docker
docker compose down — Docker
Networking on Docker Desktop — Docker