Di Dockerfile, saya punya
COPY . .
Saya ingin mengecualikan seluruh direktori, dalam kasus saya, direktori node_modules.
Sesuatu seperti ini:
COPY [all but **/node_modules/**] .
Apakah ini mungkin dengan Docker?
docker
dockerfile
docker-copy
Alexander Mills
sumber
sumber
.dockerignore
?Jawaban:
Buat file
.dockerignore
di direktori konteks bangunan buruh pelabuhan Anda (jadi dalam kasus ini, kemungkinan besar direktori yang merupakan induk dari node_modules) dengan satu baris di dalamnya:walaupun Anda mungkin hanya ingin:
Info tentang dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
sumber
/config/nginx/ /config/logstash/
ls config/ gunicorn logs logstash nginx
ls /config/
, apakah Anda mencoba menambahkan path tersebut ke .dockerignore Anda tanpa yang terdepan/
?node_modules
saja tidak bekerja di subdirektori.Bagi mereka yang tidak dapat menggunakan file .dockerignore (mis. Jika Anda memerlukan file dalam satu COPY tetapi tidak yang lain):
Ya, tetapi Anda memerlukan beberapa instruksi COPY. Khususnya, Anda memerlukan SALINAN untuk setiap huruf dalam nama file yang ingin Anda kecualikan.
Melanjutkan hingga Anda memiliki nama file lengkap, atau hanya awalan yang Anda yakini tidak akan memiliki file lain.
sumber
COPY failed: no source files were specified
ketika tidak ada file dimulai dengan 'tidak', tetapi tidak 'mengangguk'.src/
akan pergi ke/var/www
dan/conf/nginx.conf
pergi ke/etc/nginx/conf.d/default.conf
. Juga, Anda bisa menyalin semuanya, danRUN rm -r conf
kemudian (juga menjaga pohon sumbernya seperti semula). Saya ingin mendengar jika seseorang memiliki saran lain.COPY [^node_modules]*
untuk menyalin semua file tingkat atas.Dalam kasus saya, Dockerfile saya berisi langkah instalasi, yang menghasilkan
vendor
direktori (setara dengan PHPnode_modules
). Saya kemudianCOPY
direktori ini ke gambar aplikasi akhir. Oleh karena itu, aku tidak bisa meletakkanvendor
di saya.dockerignore
. Solusi saya adalah menghapus direktori sebelum melakukancomposer install
(setara dengan PHPnpm install
).Solusi ini berfungsi dan tidak mengasapi gambar akhir, tetapi tidak ideal, karena
vendor
direktori pada host disalin ke dalam konteks Docker selama proses pembangunan, yang menambah waktu.sumber
composer.lock
sebelumnyacomposer install
. Tanpa file kunci, satu set dependensi berbeda (folder vendor) dapat diinstal ketika Anda membangun di waktu berikutnya.Menambahkan .dockerignore berfungsi untuk saya. Satu poin tambahan Mereka yang mencoba solusi ini di Windows , windows tidak akan membiarkan Anda membuat file .dockerignore (karena tidak secara default memungkinkan membuat file dimulai dengan.)
Untuk membuat file seperti itu dimulai dengan. pada Windows , sertakan juga titik akhir, seperti:
.dockerignore.
dan tekan enter (asalkan Anda telah mengaktifkan opsi ekstensi tampilan dari opsi folder)sumber
Tidak termasuk node_modules dari direktori saat ini
Tidak termasuk node_modules dalam subdirektori langsung apa pun
Ini dokumen resmi
sumber