Docker derlemesi "bağlam hazırlanamıyor: bağlam bir dizin olmalıdır: / Kullanıcılar / tempUser / git / docker / Dockerfile"


92

Bir var Dockerfilebir inşa etmek gerekiyordu olduğunu Ubuntugörüntüyü. Ama ne zaman koşsam

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

Konsolda aşağıdaki hatayı gösterir

bağlam hazırlanamıyor: bağlam bir dizin olmalıdır: / Kullanıcılar / tempUser / git / docker / Dockerfile

Mac OsX kullanıyorum. Ben de denedim sudo. Hiçbir şey çalışmıyor.

Yanıtlar:


142

Bunun yerine dizini göstermeniz gerekir . Dockerfile'ı belirtmemelisiniz.

docker build -t ubuntu-test:latest .does işi .

docker build -t ubuntu-test:latest ./Dockerfileyok çalışmıyor .


Neden böyle? kolayca dosyanın kendisini gösterebildiğinizde bir dizini göstermeniz garip görünüyor
Monica Heddneck

72

Docker build -fseçeneği ile de çalıştırabilirsiniz.

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


1
Bu benim için çalıştı. Benim durumumdaki Dockerfile adı Dockerfile-abcd idi, bu yüzden ateş etmek zorunda kaldım:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale

17

DockerfileNe zaman derleneceğini belirtmek için şunları kullanabilirsiniz:

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

Varsa Ama başarısız olacak ADDveya COPYgöreli yol bağlıdır komut. Bir contextfor belirtmenin birçok yolu vardır docker build, daha fazla bilgi için docker derleme belgelerine başvurabilirsiniz .


Bunun için mi ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileSen kökünde olmalıdır Dockerfile
Dominic Motuka

15

Bağlamları anlayın

docker buildkomuta

Docker'ın build komutunun temel sözdizimi şöyledir:

docker build -t imagename:imagetag context_dir

Bağlam

Bağlam bir dizindir ve docker derleme işleminin ne göreceğini belirler: Dockerfile'ın bakış açısından, dosya context_dir/mydir/myfilesisteminizdeki herhangi bir dosya /mydir/myfileDockerfile'da ve dolayısıyla derleme işlemi sırasında olur.

Dockerfile

Dockerfile çağrılırsa Dockerfileve bağlamda yaşıyorsa, adlandırma kuralıyla örtük olarak bulunacaktır. Bu güzel, çünkü Dockerfile'ı herhangi bir docker konteynerinde hemen bulabileceğiniz anlamına geliyor.

Farklı bir ad kullanmakta ısrar ediyorsanız, "/ tmp / mydockerfile" deyin, şu şekilde kullanabilirsiniz -f:

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

ama sonra dockerfile aynı klasörde olmayacak veya en azından bulunması daha zor olacaktır.


2

Basittir, Docker derlemesi çalıştırıldığında, docker görüntünün adını bilmek ister, bu yüzden -t: 'yi geçmemiz gerekir. Şimdi Dockerfile'ınızın bulunduğu ve çalıştırdığınız dizinde olduğunuzdan emin olun.

docker build -t <image_name>:<version> . Örnek docker build -t my_apache:latest .sizin Dockerfile aksi -f bayrağı ve Dockerfile geçmesi gibi aynı dizinde olması koşuluyla.

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


O ikinci komutun benim için çalışmasını sağlamak için onu biraz değiştirmem gerekiyordu: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile( .sonuna
Josh

2

Ben de aynı sorunla karşılaşıyorum. Ben kullanıyorum docker version:17.09.0-ce.

Aşağıdaki adımları takip ediyorum:

  1. Dockerfile oluşturun ve docker görüntüsü oluşturmak için komutlar eklendi
  2. Dockfile'ı oluşturduğumuz dizine gidin
  3. aşağıdaki komutu çalıştır $ sudo docker build -t ubuntu-test:latest .

Sorun çözüldü ve başarıyla oluşturulmuş görüntü.

Not: derleme komutu, docker sürümüne ve kullandığımız derleme seçeneğine bağlıdır. :)


1

Hata almamın nedenlerinden biri, dosya adının Dockerfile olduğundan emin olmaktı. Bu yüzden anladım, umarım birine yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.