Namun pertanyaan symlink Docker lainnya. Saya memiliki banyak file yang ingin saya salin ke semua build Docker saya. Struktur dir saya adalah:
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
Dalam contoh di atas, saya ingin file.txt disalin ketika saya membangun pelabuhan di dalam dir1. Tetapi saya tidak ingin menyimpan banyak salinan file.txt. Per tautan ini, mulai buruh pelabuhan versi 0.10 , pembuatan buruh pelabuhan harus
Ikuti symlink di dalam root penampung untuk ADD instruksi build.
Tetapi saya tidak mendapatkan file atau direktori seperti itu ketika saya membangun dengan salah satu dari baris ini di Dockerfile saya:
ADD symlink /path/dirname
atau
ADD symlink/file.txt /path/file.txt
opsi mount TIDAK akan menyelesaikannya untuk saya (lintas platform ...). Saya mencobatar -czh . | docker build -t
tanpa hasil.
Apakah ada cara untuk membuat Docker mengikuti symlink dan menyalin common_files / file.txt ke dalam container yang dibangun?
Follow symlinks inside container's root for ADD build instructions.
berarti bahwa di dalam wadah symlink diikuti. Tidak dalam direktori konteks build. DiADD file.txt /dir/file.txt
direktoridir
bisa jadi symlink. Argumen yang saya kutip dalam jawaban saya masih valid dan symlink masih tidak diikuti di versi terbaru. Anda mungkin mengalami masalah (terkait pengulangan) saat menyimpan symlink di sistem kontrol revisi seperti git . Oleh karena itu silakan merujuk ke pertanyaan ini .Salah satu kemungkinannya adalah menjalankan build di direktori induk, dengan:
(Atau dengan kata lain, di direktori anak,)
Dockerfile harus dikonfigurasi untuk melakukan copy / add dengan path yang sesuai. Bergantung pada penyiapan Anda, Anda mungkin ingin
.dockerignore
di orang tua membiarkan hal-hal yang tidak ingin Anda masukkan ke dalam konteks.sumber
Jika ada yang masih memiliki masalah ini, saya menemukan solusi yang sangat bagus di superuser.com:
/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder
Ini pada dasarnya menyarankan penggunaan tar untuk mendereferensi symlink dan memasukkan hasilnya ke dalam build buruh pelabuhan:
sumber
tar: Failed to clean up compressor
,Error response from daemon: the Dockerfile (Dockerfile) cannot be empty
alih-alih menggunakan simlinks, dimungkinkan untuk menyelesaikan masalah secara administratif dengan hanya memindahkan file dari sites_available ke sites_enabled alih-alih menyalin atau membuat simlinks
jadi konfigurasi situs Anda hanya akan ada dalam satu salinan di folder site_available jika dihentikan atau sesuatu atau di sites_enabled jika harus digunakan
sumber
Saya tahu bahwa itu merusak portabilitas pembuatan buruh pelabuhan, tetapi Anda dapat menggunakan tautan keras alih-alih simbolik:
sumber