Saya memiliki Dockerfile yang disiapkan di folder root (~) saya. Tiga baris pertama file saya terlihat seperti ini:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
tetapi mengembalikan kesalahan berikut untuk setiap baris:
tidak ada berkas atau direktori seperti itu
File-file tersebut berada di direktori yang sama dengan Dockerfile saya dan saya menjalankan perintah docker build - < Dockerfile
di direktori yang sama di terminal juga.
Apa yang salah tepatnya di sini?
Jawaban:
Instruksi COPY dalam
Dockerfile
menyalin filesrc
kedest
folder. Sepertinya Anda melewatkanfile1
,file2
danfile3
atau mencoba membangunDockerfile
dari folder yang salah.Lihat Dok Dockerfile
Juga perintah untuk membangun
Dockerfile
harus seperti ini.sumber
Periksa
.dockerignore
file juga.Saya tahu ini adalah kasus yang sangat jarang, tetapi saya memiliki file yang disebutkan di sana.
sumber
ripgrep
tidak mencari di dotfiles jadi saya tidak melihat referensi sial terakhir ke direktori lama.Mungkin karena Anda merujuk file1 / file2 / file3 sebagai jalur absolut yang tidak ada dalam konteks build, Docker hanya mencari jalur dalam konteks build.
Misalnya jika Anda menggunakan COPY / home / yourname / file1, Docker build mengartikannya sebagai $ {docker build working directory} / home / yourname / file1, jika tidak ada file dengan nama yang sama di sini, tidak ada file atau direktori yang error.
Lihat Salah satu masalah buruh pelabuhan
sumber
ADD
direktif, terima kasih.Sepertinya perintah:
dan:
tidak dijalankan dengan cara yang sama. Jika Anda ingin membangun 2 image buruh pelabuhan dari dalam satu folder dengan Dockerfile dan Dockerfile2, perintah COPY tidak dapat digunakan pada contoh kedua menggunakan stdin (<Dockerfile2). Sebaliknya, Anda harus menggunakan:
Kemudian COPY berfungsi seperti yang diharapkan.
sumber
Lari
docker build . -f docker/development/Dockerfile
berhasil, yang memungkinkan Anda untuk menjalankan file buruh pelabuhan dari direktori tertentu selain root aplikasi Anda.Gunakan
-f
atau--file
untuk menentukan nama dan lokasi fileDockerfile
.Ini terjadi pada saya ketika mencoba menjalankan file buruh pelabuhan dari direktori yang berbeda.
Saya punya
COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
dan berhasil menyelesaikan ini dengan menentukan file buruh pelabuhan.Dulu
docker build docker/development/Dockerfile
yang menyebabkan masalah ini bagi saya.Saya merasa aneh pada awalnya karena ketika saya memiliki
Dockerfile
di direktori root aplikasi itu berfungsi dengan baik. Ini akan membantu jika Anda ingin mengelola file buruh pelabuhan lingkungan Anda sedikit lebih baik.sumber
docker build . -f docker/development/Dockerfile
ini berhasilSaya baru saja mengalami masalah ini dan tidak ada saran di sini yang memecahkan masalah saya. Ternyata saya memiliki akhiran baris yang salah dalam file saya, dan harus mengubahnya ke akhir baris yang sesuai. (Dalam hal ini dari CRLF ke LF, jadi Ubuntu 14.04 akan mengenali skrip, yang telah saya edit di windows.)
Saya mengubah ujung baris menggunakan VSCode, dan sebagian besar editor kode harus memiliki opsi untuk memilih akhiran baris.
Semoga ini bisa membantu seseorang.
sumber
Saya merasa sedikit bodoh, tetapi masalah saya adalah bahwa saya menjalankan docker-compose, dan Dockerfile saya berada dalam subdirektori ./deploy. Referensi ADD saya harus relatif terhadap root proyek, bukan Dockerfile.
Berubah: ADD ./file.tar.gz / etc / folder / ke: ADD ./deploy/file.tar.gz / etc / folder /
Bagaimanapun, saya pikir saya akan memposting jika seseorang mengalami masalah yang sama.
sumber
Inilah solusi dan praktik terbaiknya:
Anda perlu membuat folder sumber daya tempat Anda dapat menyimpan semua file yang ingin Anda salin.
Perintah untuk menyalin file harus ditentukan dengan cara ini:
dimana
* sumber daya - folder lokal Anda yang Anda buat di folder yang sama di mana Dockerfile berada
* / root / folder / - folder di penampung Anda
sumber
Untuk kesalahan berikut,
Saya mengatasinya dengan memulai ulang layanan buruh pelabuhan.
sumber
File tidak ditemukan kesalahan dengan Docker put_archive. Saya menggunakan Python API untuk buruh pelabuhan. Docker versi 1.12.5, build 7392c3b
Saya tidak dapat menyalin file ke kontainer buruh pelabuhan yang dibuat.
Jika saya mengubah urutan operasi, tidak ada kesalahan dan file akan disalin persis ke tempat yang saya inginkan. Jadi saya tahu kode saya berfungsi dan melakukan apa yang saya inginkan. Namun penting untuk menyalin file konfigurasi ke penampung sebelum dimulai. Mengatasi file setelah memulai membuat penampung untuk memulai dengan konfigurasi default dan bukan konfigurasi kustom yang perlu disalin ke tempatnya sebelum penampung dimulai. Docker mengklaim bahwa masalah ini telah ditutup tetapi masih memengaruhi aplikasi saya.
Ini bekerja; Kode yang sama, urutan eksekusi berbeda.
sumber
Jika Anda yakin telah melakukan hal yang benar, tetapi buruh pelabuhan masih mengeluh, lihat masalah ini: https://github.com/moby/moby/issues/27134 .
Saya terbakar oleh ini, dan sepertinya memulai ulang mesin buruh pelabuhan
service docker restart
hanya akan memperbaiki masalah ini.sumber
Saya sedang mencari perbaikan untuk ini dan folder yang saya TAMBAH atau SALIN tidak ada di folder build, beberapa direktori di atas atau dirujuk dari /
Memindahkan folder dari luar folder build ke dalam folder build memperbaiki masalah saya.
sumber
salah satu cara untuk tidak menggunakan stdin dan mempertahankan konteksnya adalah:
1) di Dockerfile Anda, Anda harus menambahkan
2) setelah itu, Anda harus pergi ke induk dari / direktori_anda_to_copy dir
2) lalu jalankan perintah ini
3) setelah Anda membuat wadah
4) Setelah Anda akan mendapatkan direktori Anda disalin di wadah Anda
sumber
Panggilan sebelumnya di COPY mungkin mengubah direktori.
Tambahkan garis miring ke panggilan pertama
sumber
Saya mengalami ini. Menyalin beberapa direktori tidak berhasil. Menyalin file berhasil. Ternyata itu karena file yang terdapat dalam .gitignore (bukan hanya .dockerignore) juga diabaikan. Lihat: https://github.com/zeit/now/issues/790
sumber
.dockerignore
sebagai pelakunyaSaya tahu ini sudah tua, tapi ada sesuatu yang perlu diperhatikan. Jika menurut Anda semuanya sudah semestinya, periksa file .gitignore Anda :)
Anda mungkin memiliki folder secara lokal, tetapi jika folder itu ada di git Anda abaikan maka itu tidak ada di server, yang berarti Docker tidak dapat menemukan folder itu karena tidak ada.
sumber
Serupa dan terima kasih atas jawaban tslegaitis , setelahnya
itu menunjukkan
Memeriksa log itu, dikatakan bahwa buruh pelabuhan akan menggunakan
.gitignore
:Jadi saya memperbaiki saya
.gitignore
(saya menggunakannya sebagai daftar putih sebagai gantinya) dan buruh pelabuhan menyalin file tersebut.[Saya menambahkan jawaban karena reputasi saya tidak cukup untuk berkomentar]
sumber
Saya mengalami masalah ini meskipun direktori sumber saya dalam konteks pembuatan yang benar. Menemukan alasannya adalah bahwa direktori sumber saya adalah tautan simbolis ke lokasi di luar konteks pembuatan.
Misalnya Dockerfile saya berisi yang berikut ini:
Jika
dir1
merupakan tautan simbolis,COPY
perintah tidak berfungsi dalam kasus saya.sumber
Jadi ini baru saja terjadi beberapa kali. Sebagai .Net dev, menggunakan VisualStudio saya mengubah nama build saya dari
SomeThing
menjadiSomething
sebagai nama DLL tetapi ini tidak mengubah file .csproj yang tetapSomeThing.csproj
Dockerfile menggunakan nama file case-sensitive linux, jadi Dockerfile yang baru dibuat secara otomatis mencoba menyalin
Something.csproj
yang tidak dapat ditemukannya. Jadi secara manual mengganti nama file itu (menjadikannya huruf kecil) membuat semuanya berfungsiTapi ... ini peringatan peringatan. Perubahan nama file di laptop Windows saya ini tidak diambil oleh Git sehingga sumber repo masih ada
SomeThing.csproj
di repo dan selama proses CI / CD, pembuatan Docker gagal karena alasan yang sama ...Saya harus mengubah nama file secara langsung sebagai komit pada repo .... solusi kecil yang buruk tetapi membuat saya pergi
tl; dr Jika di Windows O / S periksa sensitivitas huruf besar / kecil nama file dan perhatikan penggantian nama file lokal tidak diambil saat Git berubah jadi pastikan repo Anda juga dimodifikasi jika menggunakan CI / CD
sumber
Beberapa jawaban bagus sudah ada di sini. Apa yang berhasil bagi saya, adalah memindahkan komentar ke baris berikutnya.
BURUK :
BAIK :
sumber