Docker error mount denied: path is not shared from host

mount denied: path is not shared from host - Penyebab dan Solusi Teknis Lengkap

Error mount denied: path is not shared from host muncul ketika Docker gagal melakukan bind mount direktori dari host ke dalam container. Error ini biasanya terjadi saat menjalankan container dengan parameter -v atau --mount, baik secara langsung melalui docker run maupun melalui Docker Compose. Proses container akan berhenti sebelum runtime berjalan karena Docker tidak memiliki izin atau akses ke path yang diminta di sistem host.

Masalah ini sangat umum dialami oleh developer yang bekerja di lingkungan Docker Desktop, terutama pada macOS dan Windows. Pada sistem tersebut, Docker berjalan di atas virtual machine, sehingga tidak semua direktori host otomatis tersedia untuk container. Ketika path yang ingin di-mount tidak termasuk dalam daftar path yang dibagikan ke VM Docker, proses mount akan ditolak.

Dalam praktik lapangan, error ini sering muncul saat menjalankan proyek lokal, pipeline CI berbasis runner lokal, atau saat memigrasikan konfigurasi Docker dari Linux ke macOS atau Windows. Tanpa pemahaman tentang mekanisme file sharing Docker, error ini cenderung diulang dan sulit ditelusuri penyebabnya.

Penjelasan Error mount denied: path is not shared from host

Error mount denied: path is not shared from host menandakan bahwa Docker Engine tidak diizinkan mengakses direktori tertentu di sistem host untuk dijadikan bind mount. Error ini terjadi pada fase container initialization, tepat sebelum filesystem container dibangun dan proses entrypoint dijalankan.

Secara teknis, Docker melakukan validasi path host ketika menerima instruksi mount. Jika path tersebut berada di luar cakupan filesystem yang diizinkan untuk diakses oleh Docker VM, engine akan menghentikan proses dan mengembalikan error ini. Tidak ada container yang berhasil dibuat pada tahap ini.

Lingkungan yang paling sering terdampak adalah:

  • macOS dengan Docker Desktop

  • Windows dengan Docker Desktop (WSL2 atau Hyper-V)

  • Konfigurasi Docker Compose yang memanfaatkan absolute path

  • Docker versi desktop dengan pengaturan file sharing default

Pada Linux native, error ini jarang terjadi karena Docker berjalan langsung di host OS tanpa lapisan virtualisasi filesystem.

Penyebab Utama Error mount denied: path is not shared from host

Path Host Tidak Termasuk dalam File Sharing Docker

Penyebab paling umum adalah direktori host yang ingin di-mount tidak terdaftar dalam konfigurasi File Sharing Docker Desktop. Docker Desktop hanya membagikan direktori tertentu seperti /Users di macOS atau C:\Users di Windows secara default.

Jika bind mount diarahkan ke path di luar direktori tersebut, Docker Engine akan menolak akses karena VM tidak mengenali path tersebut.

Penggunaan Absolute Path yang Tidak Valid

Banyak konfigurasi Docker Compose menggunakan absolute path yang valid di Linux tetapi tidak valid di macOS atau Windows. Contohnya /var/www/app atau /opt/project yang tidak ada atau tidak dibagikan di host non-Linux.

Docker tidak melakukan translasi path lintas OS, sehingga absolute path yang salah langsung menyebabkan error mount.

Perubahan Lokasi Proyek Setelah Docker Desktop Berjalan

Dalam beberapa kasus, proyek dipindahkan ke direktori baru setelah Docker Desktop aktif. Docker Desktop tidak otomatis memperbarui daftar shared paths, sehingga path baru tersebut tidak dikenali oleh VM Docker.

Permission Filesystem Host Tidak Memadai

Meskipun path sudah dibagikan, Docker tetap membutuhkan permission read atau write sesuai jenis mount. Pada macOS dan Windows, sistem keamanan OS dapat memblokir akses Docker ke direktori tertentu meskipun sudah terdaftar.

Perbedaan Konteks Runtime Docker

Pada Windows dengan WSL2, error ini sering muncul ketika path Windows (C:\) dicampur dengan konteks Linux (/mnt/c). Docker hanya dapat mengakses path sesuai runtime yang digunakan.

Cara Memverifikasi Penyebab Error mount denied

Memeriksa Error Log Docker

Jalankan container secara manual untuk melihat error lengkap:

docker run -v /path/host:/path/container image-name

Error mount biasanya muncul sebelum container ID dihasilkan, menandakan kegagalan pada tahap mount.

Memeriksa Konfigurasi File Sharing Docker Desktop

Buka Docker Desktop lalu navigasi ke:

  • Settings → Resources → File Sharing

Pastikan path host yang digunakan dalam bind mount tercantum secara eksplisit. Jika tidak, Docker tidak akan mengizinkan mount.

Memeriksa docker-compose.yml

Periksa bagian volumes:

volumes:
  - /absolute/path/on/host:/app

Pastikan path tersebut benar-benar ada di host dan sesuai dengan OS yang digunakan.

Memastikan Path Benar di Host

Gunakan perintah berikut di host:

ls /path/host

Jika path tidak ada atau berbeda case-sensitive-nya (khusus macOS dan Linux), Docker akan gagal melakukan mount.

Memeriksa Konteks Docker

Pastikan konteks Docker yang aktif sesuai:

docker context ls
docker context use default

Konteks yang salah dapat mengarahkan Docker ke runtime yang berbeda.

Solusi Utama mount denied: path is not shared from host

Menambahkan Path ke File Sharing Docker Desktop

Solusi paling efektif adalah menambahkan direktori host ke daftar file sharing.

  1. Buka Docker Desktop

  2. Masuk ke Settings → Resources → File Sharing

  3. Tambahkan path host yang digunakan dalam mount

  4. Klik Apply & Restart

Langkah ini memastikan VM Docker memiliki akses langsung ke filesystem host yang diperlukan.

Menggunakan Relative Path dalam Docker Compose

Gunakan relative path berbasis lokasi docker-compose.yml:

volumes:
  - ./app:/app

Docker secara otomatis memetakan relative path ke direktori proyek yang sudah berada dalam file sharing default.

Memindahkan Proyek ke Direktori yang Sudah Dibagikan

Pada macOS, pindahkan proyek ke dalam /Users/username/. Pada Windows, gunakan C:\Users\username\.

Docker Desktop secara default membagikan direktori tersebut sehingga mount dapat dilakukan tanpa konfigurasi tambahan.

Restart Docker Desktop Setelah Perubahan Path

Docker Desktop memuat konfigurasi file sharing saat startup. Setiap perubahan path harus diikuti restart agar VM memperbarui mount point.

Solusi Alternatif Berdasarkan Lingkungan

Solusi untuk Linux Native

Pada Linux, error ini hampir selalu terkait permission. Pastikan Docker daemon memiliki akses ke path:

sudo chown -R $USER:$USER /path/host

Atau jalankan Docker dengan user yang sesuai.

Solusi untuk Windows dengan WSL2

Gunakan path Linux dalam WSL:

volumes:
  - /mnt/c/Users/username/project:/app

Pastikan Docker Desktop menggunakan backend WSL2 dan distro yang benar.

Solusi untuk CI/CD Pipeline

Pada runner lokal, pastikan workspace runner berada di direktori yang dibagikan. Untuk runner berbasis container, gunakan volume Docker-managed, bukan bind mount host.

volumes:
  - app-data:/app

Kesalahan yang Sering Dilakukan Saat Memperbaiki Error

Banyak pengguna mencoba menjalankan Docker dengan sudo tanpa memahami bahwa permission user bukan akar masalah pada Docker Desktop. Docker tetap berjalan di VM sehingga sudo tidak mengubah konteks file sharing.

Kesalahan lain adalah mengubah path container, bukan path host. Error ini selalu berasal dari sisi host, sehingga perubahan di Dockerfile tidak menyelesaikan masalah.

Beberapa developer juga mengedit file konfigurasi Docker Engine secara manual, padahal Docker Desktop mengelola konfigurasi tersebut secara internal dan akan menimpa perubahan.

Pencegahan Error mount denied di Masa Depan

Gunakan struktur proyek yang konsisten dan selalu berada di direktori default file sharing Docker Desktop. Hindari hardcoded absolute path lintas OS dalam Docker Compose.

Gunakan relative path sebanyak mungkin dan manfaatkan named volume untuk data persisten yang tidak membutuhkan akses langsung ke host.

Pastikan setiap anggota tim menggunakan standar lokasi proyek yang sama untuk menghindari error lintas lingkungan.

Dalam pipeline CI/CD, gunakan volume Docker-managed atau artifact workspace, bukan bind mount ke filesystem host runner.

Penutup

Error mount denied: path is not shared from host adalah indikasi langsung bahwa Docker tidak diizinkan mengakses filesystem host yang diminta. Masalah ini bukan berasal dari container atau image, melainkan dari konfigurasi file sharing dan validitas path host. Dengan memahami bagaimana Docker Desktop memetakan filesystem host ke VM, error ini dapat diidentifikasi dengan cepat dan diselesaikan secara deterministik. Pendekatan yang disiplin terhadap struktur path, permission, dan konteks runtime akan mencegah error ini muncul kembali di lingkungan development maupun production.