GNU/Linux >> Belajar Linux >  >> Linux

Volume file tunggal dipasang sebagai direktori di Docker

test adalah nama gambar Anda yang telah Anda buat dengan 'docker build -t test ', bukan /test folder.

Coba Dockerfile dengan:

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

Dan:

docker run --rm -it -v $(pwd)/file.json:/file.json test

Perhatikan penggunaan $(pwd) untuk memasang file dengan jalur absolut lengkapnya (jalur relatif tidak didukung)

Dengan menggunakan $(pwd) , Anda akan mendapatkan jalur absolut yang memang ada, dan menghormati kasusnya, berlawanan dengan nama file atau jalur yang mungkin tidak ada.
Jalur host yang tidak ada akan dipasang sebagai folder di penampung.


Mungkin itu sudah jelas dalam jawaban di atas ... tetapi saya butuh waktu untuk mengetahuinya dalam kasus saya.

Alasan mendasar yang menyebabkan file yang dibagikan dengan -v muncul sebagai direktori alih-alih file adalah karena Docker tidak dapat menemukan file tersebut di host. Jadi Docker membuat direktori baru dalam wadah dengan nama menjadi nama file yang tidak ada di host karena buruh pelabuhan berpikir bahwa pengguna hanya ingin berbagi volume/direktori yang akan dibuat di masa mendatang.

Jadi dalam masalah yang dilaporkan di atas, jika Anda menggunakan direktori relatif dalam perintah -v dan docker tidak memahami direktori relatif, itu berarti file tersebut tidak ditemukan di host sehingga buruh pelabuhan membuat direktori. Dan jawaban di atas yang menyarankan untuk menggunakan $(pwd) akan menjadi solusi yang tepat ketika masalahnya disebabkan oleh direktori relatif.

Namun bagi mereka yang membaca halaman ini yang tidak menggunakan direktori relatif dan mengalami masalah yang sama... maka cobalah untuk memahami mengapa file tersebut hilang di host.

Itu bisa saja kesalahan ketik yang bodoh...

Bisa jadi Anda menjalankan perintah "docker run" dari klien yang memunculkan wadah buruh pelabuhan di host yang berbeda dan file yang dibagikan tidak ada di host yang berbeda tersebut. File yang dibagikan dengan -v harus ada di host tempat agen buruh pelabuhan akan menelurkan wadah ... belum tentu di klien tempat perintah "docker run -v ..." dijalankan (walaupun akan sama di banyak kasus).

Ada kemungkinan penjelasan lain di atas untuk Mac dan Windows... bisa jadi itu juga.

Jadi file yang hilang dari host adalah masalahnya... pecahkan masalah dalam penyiapan Anda... menggunakan $(pwd) bisa menjadi solusinya tetapi tidak selalu.


Linux
  1. Manajer File Java

  2. Perbedaan Perhitungan Ukuran Direktori?

  3. Linux – Tujuan Direktori /net?

  1. Menambahkan Volume Tukar?

  2. Memahami Volume Docker

  3. Cara Memasang atau Menghubungkan Satu File di Wadah Docker

  1. Lembar contekan Izin File/Direktori Linux

  2. Hapus symlink ke direktori

  3. Membuka file .tar.gz dengan satu perintah