Build Docker memberikan "tidak dapat menyiapkan konteks: konteks harus berupa direktori: / Users / tempUser / git / docker / Dockerfile"

92

Saya memiliki Dockerfileyang seharusnya membangun Ubuntucitra. Tapi kapanpun aku lari

docker build -t ubuntu-test:latest ./Dockerfile

Ini menunjukkan kesalahan berikut di konsol

tidak dapat menyiapkan konteks: konteks harus berupa direktori: / Users / tempUser / git / docker / Dockerfile

Saya menggunakan Mac OsX. Saya mencoba sudojuga. Tidak ada yang berhasil.

Damien-Amin
sumber

Jawaban:

142

Anda harus mengarahkan ke direktori sebagai gantinya. Anda tidak harus menentukan dockerfile.

docker build -t ubuntu-test:latest .melakukan pekerjaan .

docker build -t ubuntu-test:latest ./Dockerfiletidak tidak bekerja .

Damien-Amin
sumber
kenapa seperti ini rasanya aneh perlu menunjuk ke sebuah dir ketika Anda dapat dengan mudah mengarahkannya ke file itu sendiri
Monica Heddneck
72

Anda juga dapat menjalankan buruh pelabuhan dengan -fopsi

docker build -t ubuntu-test:latest -f Dockerfile.custom .

JakubKnejzlik
sumber
1
Ini berhasil untuk saya. Nama Dockerfile dalam kasus saya adalah Dockerfile-abcd jadi saya harus memecat:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale
17

Untuk menentukan Dockerfilekapan build, Anda dapat menggunakan:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

Tetapi akan gagal jika ada ADDatau COPYperintah yang bergantung pada jalur relatif. Ada banyak cara untuk menentukan contextuntuk docker build, Anda dapat merujuk ke dokumen dari pembuat galangan kapal untuk info lebih lanjut.

shizhz
sumber
Lakukan ini untuk ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileAnda harus berada di root Dockerfile
Dominic Motuka
15

Pahami konteksnya

The docker buildperintah

Sintaks dasar dari perintah build buruh pelabuhan adalah

docker build -t imagename:imagetag context_dir

Isi

Konteksnya adalah direktori dan menentukan apa yang akan dilihat oleh proses pembangunan buruh pelabuhan: Dari sudut pandang Dockerfile, semua file context_dir/mydir/myfiledalam sistem berkas Anda akan menjadi /mydir/myfiledalam Dockerfile dan karenanya selama proses pembangunan.

Dockerfile tersebut

Jika dockerfile dipanggil Dockerfiledan hidup dalam konteksnya, itu akan ditemukan secara implisit dengan konvensi penamaan. Itu bagus, karena itu berarti Anda biasanya dapat menemukan Dockerfile di container docker apa pun dengan segera.

Jika Anda bersikeras menggunakan nama yang berbeda, ucapkan "/ tmp / mydockerfile", Anda dapat menggunakan -fseperti ini:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

tetapi file docker tersebut tidak akan berada di folder yang sama atau setidaknya akan lebih sulit ditemukan.

Lutz Prechelt
sumber
2

Sederhana saja, setiap kali build Docker dijalankan, pekerja galangan ingin tahu, apa nama gambarnya, jadi kita perlu meneruskan -t:. Sekarang pastikan Anda berada di direktori yang sama di mana Anda memiliki Dockerfile dan menjalankannya

docker build -t <image_name>:<version> . Contoh docker build -t my_apache:latest .dengan asumsi Anda berada di direktori yang sama dengan Dockerfile Anda, jika tidak, berikan flag -f dan Dockerfile.

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile

Prashanth
sumber
Untuk menjalankan perintah kedua itu untuk saya, saya harus mengubahnya sedikit: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(perhatikan penambahan a .di akhir)
Josh
2

Saya menghadapi masalah yang sama. Saya menggunakan docker version:17.09.0-ce.

Saya mengikuti langkah-langkah di bawah ini:

  1. Buat Dockerfile dan tambahkan perintah untuk membuat image buruh pelabuhan
  2. Pergi ke direktori tempat kita membuat Dockfile
  3. jalankan perintah di bawah ini $ sudo docker build -t ubuntu-test:latest .

Ini menyelesaikan masalah dan gambar dibuat dengan sukses.

Catatan: perintah build tergantung pada versi docker serta opsi build yang kami gunakan. :)

Rajeev Rathor
sumber
1

Salah satu alasan saya mendapatkan error adalah nama file pastikan nama file tersebut adalah Dockerfile Jadi saya mengetahuinya, semoga dapat membantu seseorang.

Dheeraj Kumar
sumber