Docker: bağlam hazırlanamıyor: Dockerfile yolundaki semboller değerlendirilemiyor: GetFileAttributesEx


190

Bugün Windows 10 64bit için Docker Toolbox'ı indirdim. Eğiticiden geçiyorum. Dockerfile kullanarak bir görüntü oluşturmaya çalışırken aşağıdaki hatayı alıyorum.

Adımlar:

  • Docker Hızlı Başlangıç ​​terminalini başlattı.
  • testdocker oluşturduktan sonra.
  • Dockerfile'ı "Kendi resminizi oluşturun" web bağlantısında belgelendiği şekilde hazırlayın
  • komutun altında koştu

docker build -t docker-whale .

Error: $ docker build -t docker-whale .

unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Users\Villanueva\Test\testdocker\Dockerfile: The system cannot find the file specified.

BTW: Bahsedilen birkaç seçeneği denedim @ https://github.com/docker/docker/issues/14339

    $ docker info
    Containers: 4
     Running: 0
     Paused: 0
     Stopped: 4
    Images: 2
    Server Version: 1.10.1
    Storage Driver: aufs
     Root Dir: /mnt/sda1/var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 20
     Dirperm1 Supported: true
    Execution Driver: native-0.2
    Logging Driver: json-file
    Plugins:
     Volume: local
     Network: bridge null host
    Kernel Version: 4.1.17-boot2docker
    Operating System: Boot2Docker 1.10.1 (TCL 6.4.1); master : b03e158 - Thu Feb 11 22:34:01 UTC 2016
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 996.2 MiB
    Name: default
    ID: C7DS:CIAJ:FTSN:PCGD:ZW25:MQNG:H3HK:KRJL:G6FC:VPRW:SEWW:KP7B
    Debug mode (server): true
     File Descriptors: 32
     Goroutines: 44
     System Time: 2016-02-19T17:37:37.706076803Z
     EventsListeners: 0
     Init SHA1:
     Init Path: /usr/local/bin/docker
     Docker Root Dir: /mnt/sda1/var/lib/docker
    Labels:
     provider=virtualbox

4
Güncelleme: docker build -t XXX --file ./Dockefile. çalıştı. Docker, Windows kullanıcıları için belgelerini güncellemek isteyebilir.
villanux

4
Eğer docker build -t XXX --file ./Dockefilebunu R. eksik dosya adı yanlış var olabilir; bu durumda
EXA

17
Bu inanılmaz kötü bir hata mesajı, sadece "dosya açılamıyor" anlamına geliyor - Linux ve macOS için aynı.
RichVel

Akıl almaz derecede kötü bir hata mesajı.
Sınırlı Kefaret

Yanıtlar:


205

aşağıdaki komutu yürütürken:

docker build -t docker-whale .

Dockerfile öğesinin geçerli çalışma dizininizde mevcut olup olmadığını kontrol edin.


28
Teşekkürler. Benim sorunum Not Defteri'nde Dockerfile oluşturmuş ve otomatik olarak dosya adına .txt eklenmişti.
IanGSY

5
Ayrıca Dockerfile adını fbayrakla da açıkça yazabilirsiniz docker build -f Dockerfile-dev.yaml -t my_container .. Aynı şey docker-compose için de geçerlidir. Bağlam ( .) eşleşmediğinden bunları farklı alt dizinlere koymak işe yaramaz .
Sumi Straessle

1
@IanGSY Keşke size daha fazla puan verebilseydim. Bu benim de sorunumdu!
K. Brafford

5
Not Defteri aşırı derecede kötü bir programdır.
Per Lundberg

99

Bu bir utanç!

Hata mesajı yanıltıcı. Sorunun sembollerle gerçekten ilgisi yok. Genellikle sadece docker Dockerfile dosyasını bulamaz tanımlayan .

Bunun tipik nedenleri şunlardır:

  • Dockerfile'ın adı yanlış .
    Çağrılmalıdır Dockerfile. Denir ise, örneğin, dockerfile, .Dockerfile,Dockerfile.txt , ya da diğer bu bulunmayacak.
  • Dockerfile bağlamda değil .
    Eğer derseniz docker build contextdirDockerfile dosyasında olmalıdır contextdir/Dockerfile. Eğer varsa, söyle,./Dockerfile bunun yerine, bulunmaz.
  • Dockerfile hiç yok .
    Aptalca geliyor mu? Peki, güzel bir Dockerfile yazdıktan sonra ancak kontrol etmeyi unuttuktan sonra GitLab CI'mdan yukarıdaki hata mesajını aldım. Elbette. Olası olmayan? Hayır.

Tek utanç değil ...

Sadece bu bir hata mesajı belirsiz ve kafa karıştırıcı değildir. Genellikle docker kavramlarının bazılarını ve belgelerin çoğunun anlamsal olarak kesin olmadığını düşünüyorum.

Gerçekten kötü noktalardan biri, "etiket" (Ağustos 2019 itibariyle) kavramıdır . Belgelere nereden baktığınıza bağlı olarak, aşağıdakilerin tümünü (az çok açık bir şekilde) söylüyor:

  • Orada tag bir resim adı denir, komut, ancak tedarik argüman değil bir etiket veya etiket adı olarak adlandırılır.
  • Resim adı, iki nokta üst üste işareti ile ayrılmış bir resim adı ve etiketten oluşur.
  • Gelen tagkomut argümanı, etiket adı isteğe bağlıdır ancak resim adı zorunludur. Açık.
  • Belgeler sayfasının sözleriyle:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • Ancak bu görüntü adındaki görüntü adının tamamı aslında görüntü adı değildir, çünkü görüntü adı bir ana bilgisayar adının önüne eklenebilir.
  • Bazen bu ana bilgisayar adı bölümü , görüntü adının bir parçası olarak kabul edilir.
  • Her durumda, ana bilgisayar adında x(veya daha önce, ancak bir şekilde sihirli bir şekilde her zaman yapışan) bir görüntünün daha sonra bu ana bilgisayarda x(bir kayıt defterinde) yaşaması beklenir . Böyle bir görüntüye erişmek istiyorsanız, az çok ana bilgisayar önekiyle bu adı kullanmanız gerekir x.
  • Ancak bu ada sahip bir görüntü yalnızca herhangi bir ana bilgisayarda yaşayabilir x, çünkü görüntüyü "itmek" xayrı bir işlemdir.
  • Bu nedenle, bir docker görüntü listesinde bu adı görmek çok fazla bir şey ifade etmez, ancak kesinlikle bir şey ima edecektir. Bazen yanlış.
  • Bu arada: İsim alanlarından bahsetmiş miydim? Ana bilgisayar adı ile görüntü adındaki görüntü adı arasında geçiş yapabilirler. Ayrıca, nereye baktığınıza bağlı olarak resim adının bir parçasıdır veya değildir.

Eğer kafanız karıştıysa, bu sizin hatanız değildir .

Rant sonu.


Bence bu, ikinci yarı olmadan çok daha güçlü (ve daha alakalı) bir cevap olacaktır.
Paul Gear

2
Harika cevap ve arka plan bilgileri için teşekkürler
leon

Aynı mesajla sorunumu çözen ek ipucu: CaSinG'inizin doğru olduğundan emin olun. Dizin yolu ve Dockerfile için. Linux bu konuda oldukça seçici olduğu için.
RaimondB

38

Windows 8 üzerinde çalışıyorsanız Docker araç kutusunu kullanırsınız. Dockerfile bir metin dosyası olduğundan mydockerbuild dizininden aşağıdaki komutu çalıştırın

docker build -t docker-whale -f ./Dockerfile.txt .

3
ileride başvurmak için bunu yapmanız gerekiyorsa, bunun nedeni Dockerfile dosyanızın bir uzantıya sahip olmasıdır, ancak varsayılan olarak Docker da bunu beklemez. Dosyayı uzantı ile manuel olarak ayarlamak, ihtiyacınız olmayan baş ağrılarını ekler. Windows Gezgini'ni uzantıları gösterecek şekilde ayarlamalı ve ardından uzantıyı kaldırmalısınız.
Alex

docker belgelerine "başlarken" öğreticisini takip ediyorsanız şunu kullanırsınız:docker build -t friendlyhello -f ./Dockerfile.txt .
Mike Kellogg

Dosya adını ve kukla yolunu da belirtmeniz gereken gerçekten semantik. ve / veya her zaman dosyanızı Dockerfile olarak adlandırın .. :-(
myloginid

Bu benim günümü kurtardı. Bu arada, bir Mac makinesi kullanıyorum. Ancak buradaki yakalama, Dockerfile'ın düz bir metin dosyası oluşturmasıdır. Yardım için teşekkürler dostum.
Sachidananda Naik

23

Dosyanın adı olmamalı Dockerfileve olmamalıdır .Dockerfile. Dosyanın uzantısı olmamalıdır.


14

Dockerfile (büyük harf) yerine dockerfile dosyamı adlandırmıştım ve bunu değiştirdiğimde, "Dockerfile" dosyamı işlemeye başladı.


14

Dockerfile dosyasından .txt uzantısını kaldırın ve komutu çalıştırın

docker build -t image-name 

Kesinlikle işe yarayacak.


9

Görüntü oluşturmak için doğru komutu kullandığım halde (MacBook'ta) bu hatayı aldım,

docker build -t testimg .

Daha sonra sorunun yol olduğunu gördüm. Docker dosyasını içeren doğru yola gidin. Sadece geçerli çalışma dizininizi iki kez kontrol edin.


4

Windows 10'da ... dönem ilk parametredir

docker build . -t docker-whale


8
artık değil (eğer varsa) docker build -t docker-whale .geçerli bir komuttur
sebagomez

4

Bunun nedeni Not Defteri'nin Dockerfile'ın sonuna ".txt" eklemesidir.


4

WSL'de, yol dönüştürmeyle ilgili bir sorun var gibi görünüyor. Ubuntu'daki (Docker'ı çalıştırdığım ve Dockerfile'nin yaşadığı yer) Dockerfile'ın konumu "/ home / sxw455 / App1" dir, ancak bu komutların hiçbiri işe yaramaz:

$ pwd
/home/sxw455/App1
$ ll
total 4
drwxrwxrwx 0 sxw455 sxw455 4096 Dec 11 19:28 ./
drwxr-xr-x 0 sxw455 sxw455 4096 Dec 11 19:25 ../
-rwxrwxrwx 1 sxw455 sxw455  531 Dec 11 19:26 Dockerfile*
-rwxrwxrwx 1 sxw455 sxw455  666 Dec 11 19:28 app.py*
-rwxrwxrwx 1 sxw455 sxw455   12 Dec 11 19:27 requirements.txt*

$ docker build -t friendlyhello .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Windows\System32\Dockerfile: The system cannot find the file specified.

$ docker build -t friendlyhello "/home/sxw455/App1"
unable to prepare context: path "/home/sxw455/App1" not found

Ancak Windows'da asıl yol:

C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1

Ve bu yüzden bunu yapmak zorunda kaldım (bash'dan koştuğum halde):

$ docker build -t friendlyhello 
"C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1"

Sending build context to Docker daemon   5.12kB
Step 1/7 : FROM python:2.7-slim
 ---> 0dc3d8d47241
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> f739aa02ce04
Step 3/7 : COPY . /app
 ---> Using cache
 ---> 88686c524ae9
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Using cache
 ---> b95f02b14f78
Step 5/7 : EXPOSE 80
 ---> Using cache
 ---> 0924dbc3f695
Step 6/7 : ENV NAME World
 ---> Using cache
 ---> 85c145785b87
Step 7/7 : CMD ["python", "app.py"]
 ---> Using cache
 ---> c2e43b7f0d4a
Successfully built c2e43b7f0d4a
Successfully tagged friendlyhello:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

İlk yükleme sırasında ortam değişkenleriyle benzer sorunlar yaşadım ve Windows DockerCE'yi yüklemek ve Ubuntu DockerCE'yi yüklemek yerine ortam değişkenlerini kesmek için söylenen bazı önerileri takip ettim, çünkü WSL'nin tam olarak uygulamadığını (umarım doğru hatırlıyorum) systemctl. Windows Docker CE kurulumu tamamlandıktan ve ortam değişkenleri ayarlandıktan sonra, docker WSL / Ubuntu altında sorunsuz çalışır.


Bu benim için çalıştı! Yalnızca Docker Toolbox'ı yükledim ve WSL'ye yüklemedim; bunun yerine, WSL şimdi bunu yapabildiğinden, doğrudan windows yürütülebilir dosyalarını kullanıyorum.
Lawrence Lee

4

DockerFile'ımı VS2017 Docker Destek aracıyla oluşturdum ve aynı hatayla karşılaştım. Bir süre sonra Dockerfile dosyasını içeren doğru dizinde olmadığımı fark ettim (~\source\repos\DockerWebApplication\). cd'ed (~/source/repos/DockerWebApplication/DockerWebApplication), projenin içinde bulunan ve docker görüntüsünü başarıyla yaratan doğru dosyaya .


4

Aşağıdaki komut benim için çalıştı docker build -t docker-whale -f Dockerfile.txt.


Dockerfile bir .txt dosyası değil. Eğer bir .txt dosyası olarak varsa tekrar hata verecektir.
Donald Shahini

3

Bir dockerfile oluşturmanın iki yolu:

Oluşturulacak dosya adını belirtmemeye ve sadece bir yol belirterek oluşturmaya karar verebilirsiniz (bu şekilde dosya adı Dockerfileeklenti eklenmemiş olmalıdır , örneğin:docker build -t docker-whale:tag path/to/Dockerfile

veya

Sen bir dosyayı belirtebilirsiniz -fve (mâkul Ne uzantısı önemli değil .txt, .dockerfile, .Dockerfilesen örneğin kullanımına karar vs ..) docker build -t docker-whale:tag /path/to/file -f docker-whale.dockerfile.


2

Başlangıçta Dockerfile'ımı PowerShell'de oluşturmuştum ve dosyada bir PS Dosya Türü olarak gösterilen bir uzantı görmedim ... "Notepad ++ 'dan dosyayı oluşturduktan sonra" Tüm türler ( . ) "Dosyasını seçtiğinizden emin olun Dosya Adı'na (Dockerfile) uzantısız yazın. Bu, görüntü oluşturma komutumun başarıyla tamamlanmasına izin verdi .... Dockerfile dosyanızın bir tür "Dosya" olduğundan emin olun ...


2

Sorun dosya adının DockerFile veya DockerFile veya dockerfile olmaması, D büyük harf ve ardından küçük harfli ockerfile olması gerektiğidir.


2

DOCKERfileUygulama dizininin KÖK'ünde olduğundan emin olun , src'de benimki vardı, bu Docker'ın yolunu bulamadığı için bu hatayla sonuçlandıDOCKERfile


1

Dockerfile oluşturmak için otomatik içeriği Dockerfile klasörüne kaydedin. Dockerfile değil çünkü bir dosya komutu açılırken:

$ notepad Dockerfile 

(Bir metin dosyası yazılır, böylece dosya oluşturulamaz)

Dosya çalışması oluşturmak için:

$ notepad Dockerfile

ve Şimdi çalıştırın:

$ docker build -t docker-whale .

Geçerli Dockerfile dizininde olduğunuzdan emin olun.


1

En önemlisi dosya adınızın Dockerfile başka bir ad kullanırsanız işe yaramayacağından (en azından benim için işe yaramadı.)

Ayrıca Dockerfile öğesinin bir .ie docker build -t Myubuntu1:v1 . veya mutlak yolu yani docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker


1

(Windows 10'a çalıştırmak) benim dava
1) dosyasını yeniden adlandırın myDockerFile.Dockerfileiçin Dockerfile( olmadan dosya uzantısı).
O zaman kaç gelen klasöründe bu komut dışında:

docker build .\Docker-LocalNifi\ 

Bu benim için ve iş arkadaşlarım için çalışıyor, umarım bu sizin için de işe yarar


1

"Dockerfile" dosya adının herhangi bir uzantıyla kaydedilmediğinden emin olun. Herhangi bir uzantı olmadan bir dosya oluşturun.

Dockerfile'ın, docker görüntüsünü oluşturmaya çalıştığınız dizinde olduğundan emin olun.



0

Çalıştığım yol bir Junction dizini altındayken bunu Windows'ta aldım. Benim düzeltmem bu yolun altında çalışmak değildi.


0

Mac'te aşağıdaki komut için çalışır. (umarım .Dockerfilekök dizininizdedir).

docker build -t docker-whale -f .Dockerfile .

0

Sorun DockerFile oluşturma yordamı ile ilgilidir.

Çalışmak için, ilgili dizine cmd, cd'yi açın ve şunu yazın:

abc>DockerFile

Bu, klasörünüzün içinde DockerFile adlı bir dosya oluşturur.

Şimdi şunu yazın:

notepad DockerFile 

Bu, DockerFile dosyasını not defterinde açar ve sağlanan standart kodu kopyalamanız / yapıştırmanız gerekir.

Dosyayı kaydedin ve sonunda Docker yazarak resminizi oluşturun:

docker build -t docker-whale . 

Bu benim için çalışıyor ve umarım başkalarına yardımcı olur


0

Dockerfile.txtÇalışma dizinimde yanlışlıkla yukarıda belirtilen hataya yol açtım.build

Düzeltme, uzantıyı dosyadan kaldırmaktı.txt .

Dosya adı Dockerfileyalnızca uzantısız olmalıdır .


0

docker build -t getting-started .Proje dizininizde yürütün ve Dockerfile dosyasının var olduğundan ve .txtuzantısının olmadığından emin olun . Windows'daysanız, .txt dosyasının var olup olmadığını göstermek için Dosya Gezgini'nin görünüm sekmesinin altındaki 'dosya adı uzantısını' kontrol edin ve birincisi doğruysa kaldırın. İyi şanslar.


0

Ben de aynı sorunlarla karşı karşıya ve ben DockerFile adlı bir dosya oluşturduğunuzda ve herhangi bir görüntü oluşturulurken yürütmek isteyen tüm komut bahsedilen çözüldü.


0

Hata , yanlış girilmiş docker buildbir a'nın kullanıldığı PATH | URLveya Dockerfilegeçerli dizinde bulunamayacağı anlamına gelir . Ayrıca, komutu tümleşik bir terminalden çalıştırırken (örn bash. IDE veya metin düzenleyicinizin içinde) bunu yapmak için yönetici izinlerine sahip olduğunuzdan emin olun. Eğer kontrol edebilirsiniz eğer iyi PATHile terminalden pwd(içinde bash shellveya dirbir basit kullanılıyorsa clipencerelerde) ile görüntü yapı olması istediğiniz tam yolunu kopyalayın.

docker build C:\windows\your_amazing_directory

docker build --help ayrıca hatalı biçimlendirilmiş veya yasa dışı komutlarda kullanılabilecek seçenekleri de gösterir.


-1

Bunu denedim ve işe yaradı:

$ docker build -t test_dotnet_image 
"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"

Lütfen kat adının çevresindeki tırnak işaretlerini ve tırnak işaretlerini kaldırın.

Not: Klasörde "C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"Dockerfile'ım var.


-1

Windows / linux'da komut satırından bir görüntü oluşturmak için. 1. Geçerli dizinde bir docker dosyası oluşturun. örneğin: FROM ubuntu RUN apt-get güncelleme RUN apt-get -y apache2 ADD yükleyin. / var / www / html ENTRYPOINT apachectl -D ÖNSÖZ ENV adı Devops_Docker 2. .txt uzantısı ile kaydetmeyin. 3. Komut satırı altında docker build komutunu çalıştırın. -t apache2image

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.