Docker: не в змозі підготувати контекст: не в змозі оцінити посилання на шляху Dockerfile: GetFileAttributesEx


190

Я щойно завантажив Docker Toolbox для Windows 10 64bit сьогодні. Я переглядаю підручник. Я отримую наступну помилку при спробі скласти зображення за допомогою Dockerfile.

Кроки:

  • Запущений термінал Docker Quickstart.
  • testdocker після його створення.
  • Підготуйте Dockerfile, як це зафіксовано у веб-посиланні "Створіть власний образ"
  • біг нижче команди

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: Я спробував кілька згаданих варіантів @ https://github.com/docker/docker/isissue/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
Оновлення: докер збірки -t XXX --file ./Dockefile. працювали. Докер може захотіти оновити свою документацію для користувачів Windows.
villanux

4
Якщо docker build -t XXX --file ./Dockefileце може бути тому, що ви неправильно
позначили

17
Це надзвичайно погано повідомлення про помилку, воно просто означає "не вдається відкрити файл" - те саме в Linux та macOS.
RichVel

Зрозуміло погано повідомлення про помилку.
обмежене спокутування

Відповіді:


205

під час виконання наступної команди:

docker build -t docker-whale .

перевірте, чи Dockerfile присутній у вашому поточному робочому каталозі.


28
Дякую. Моя проблема полягала в тому, що я створив свій Dockerfile у Блокноті, і він автоматично додав .txt до імені файлу.
IanGSY

5
Ви також можете чітко записати ім'я Dockerfile разом із fпрапором, як це в docker build -f Dockerfile-dev.yaml -t my_container .цьому може виявитися корисним, якщо у вашому проекті є, наприклад, кілька Dockerfile. Те саме стосується докер-композиту. Розмістити їх у різних підкаталогах не вийде, оскільки контекст ( .) не збігатиметься.
Sumi Straessle

1
@IanGSY Я хотів би, щоб я міг дати вам більше балів за це. Точно це була і моя проблема!
К. Брафорд

5
Блокнот - це надмірно зла програма.
Пер Лундберг

99

Соромно!

Повідомлення про помилку вводить в оману. Проблема не має нічого спільного із символьними посиланнями. Зазвичай лише те, що докер не може знайти Dockerfile, що описує збірку.

Типові причини:

  • У Dockerfile неправильна назва .
    Це треба викликати Dockerfile. Якщо це називається, наприклад, dockerfile, .Dockerfile, Dockerfile.txtабо інший, він не буде знайдений.
  • Dockerfile не в контексті .
    Якщо ви скажете docker build contextdir, Dockerfile повинен бути на contextdir/Dockerfile. Якщо у вас є, скажіть, ./Dockerfileзамість цього він не знайдеться.
  • Dockerfile взагалі не існує .
    Звучить нерозумно? Що ж, мені надійшло вище повідомлення про помилку від мого CI GitLab після того, як я написав хороший Dockerfile, але забув перевірити його. Дурний? Звичайно. Навряд чи? Немає.

Це не єдиний сором ...

Не тільки це одне повідомлення про помилку є розпливчастим і заплутаним. Я, як правило, вважаю, що деякі концепції докера та значна частина документації є семантично неточними.

Одне з насправді поганих плям - поняття «тег» (станом на серпень 2019 року). Залежно від того, де ви шукаєте в документації, вона говорить про всі наступні речі (більш-менш чітко):

  • Існує tagкоманда, але аргумент, який ви надаєте, не називається тегом або ім'ям тега, він називається іменем зображення.
  • Ім’я зображення складається з назви зображення та тегу, розділених двокрапкою.
  • У tagаргументі назви ім'я тегу необов’язково, але ім'я зображення є обов'язковим. Очевидно.
  • Словами сторінки документації:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • Але не все ім'я зображення в цьому імені зображення є насправді ім'ям зображення, оскільки ім'я зображення може бути префіксом імені хоста.
  • Хоча іноді це ім'я хоста частина буде розглядатися як частина імені образу.
  • У будь-якому випадку, зображення з ім'ям хоста xв (або раніше), але якось магічно завжди чіпляється за його ім'я зображення, тоді повинно жити на цьому хості x(в реєстрі). Якщо ви хочете отримати доступ до такого зображення, вам більше або менше доведеться використовувати це ім'я з префіксом хоста x.
  • Але зображення з таким ім'ям може жити на будь-якому хості, а не тільки на xтому, що "натискання" на зображення x- це окрема операція.
  • Тож побачити це ім’я в списку зображень докера не означає дуже багато, але воно обов'язково щось підкреслить. Іноді неправильно.
  • До речі: я згадав простори імен? Вони можуть переходити між назвою хоста та назвою зображення у назві зображення. А також є частиною назви зображення чи ні, залежно від того, де ви шукаєте.

Якщо вас це бентежить, це не ваша вина.

Кінець гніту.


Думаю, це було б набагато сильнішою (і більш актуальною) відповіддю без другого тайму.
Пол Гір

2
Великий відповідь, і спасибі за довідкову інформацію
Леон

Додатковий підказок, який вирішив мою проблему тим же повідомленням: будьте впевнені, що ваш CaSinG правильний. Для шляху до каталогу, а також для Dockerfile. Оскільки Linux є досить прискіпливим до цього.
RaimondB

38

Якщо ви працюєте над Windows 8, ви б використовували інструмент Docker. З каталогу mydockerbuild запустіть команду нижче, оскільки ваш Dockerfile є текстовим файлом

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

3
для подальшої довідки, якщо вам потрібно це зробити, це тому, що ваш Dockerfile має розширення, тоді як Docker за замовчуванням очікує цього не занадто. Встановлення файлу вручну за допомогою розширення додає головних болів, які вам не потрібні. Ви повинні встановити Windows Explorer для показу розширень, а потім видалити розширення.
Олексій

якщо ви будете дотримуватися підручника з докерівською документацією "приступати до роботи", ви скористаєтеся цим:docker build -t friendlyhello -f ./Dockerfile.txt .
Майк Келлог

Його дійсно погана семантика, що вам потрібно вказати ім'я файлу та пустуючу путь. та / або завжди називайте свій файл Dockerfile .. :-(
myloginid

Це врятувало мені день. До речі, я використовую машину Mac. Але тут упіймання полягає в тому, що в Dockerfile був створений звичайний текстовий файл. Дякую приятелю за допомогу.
Sachidananda Naik

23

Ім'я файлу має бути, Dockerfileа не .Dockerfile. Файл не повинен мати розширення.


14

Я назвав свій файл dockerfile замість Dockerfile (з великої літери), і як тільки я це змінив, він почав обробляти мій "Dockerfile".


14

Просто видаліть розширення .txt з Dockerfile і запустіть команду

docker build -t image-name 

Це буде працювати точно.


9

У мене ця помилка (у MacBook), хоча я використовував правильну команду для створення зображення,

docker build -t testimg .

Пізніше я виявив, що проблема є проблемою. Просто перейдіть до правильного шляху, який містить файл docker. Просто перевірте свій поточний робочий каталог. Нічого не панікуйте!


4

У Windows 10 ... першим параметром є період

docker build . -t docker-whale


8
не більше (якщо коли-небудь) docker build -t docker-whale .є дійсною командою
sebagomez


4

У WSL, мабуть, є проблема з перетворенням шляху. Місце Dockerfile в Ubuntu (де я запускаю докер і де Dockerfile живе) "/ home / sxw455 / App1", але жодна з цих команд не працювала:

$ 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

Але в Windows фактичний шлях:

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

І тому мені довелося це зробити (навіть якщо я запустив це з басу):

$ 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.

У мене були подібні проблеми зі змінними середовища під час початкової інсталяції, і я дотримувався деяких порад, які говорили про встановлення Windows DockerCE та зламати змінні середовища, а не про встановлення Ubuntu DockerCE, оскільки (сподіваюся, я правильно це запам'ятав), WSL не повністю реалізує systemctl. Після того, як установка Windows Docker CE завершена і встановлені змінні середовища, докер потім добре працює під WSL / Ubuntu.


Це працювало для мене! Я встановив лише Docker Toolbox і не встановив його у WSL; натомість я використовую виконувані файли Windows безпосередньо, оскільки WSL може це робити зараз.
Лоуренс Лі

4

Я створив свій DockerFile інструментом підтримки Docker VS2017 і мав ту саму помилку. Через деякий час я зрозумів, що не знаходжусь у правильному каталозі, який містить Dockerfile (~\source\repos\DockerWebApplication\). cd'ed у потрібний файл, (~/source/repos/DockerWebApplication/DockerWebApplication)який знаходився всередині проекту, і успішно створив зображення докера.



3

Два способи скласти докер-файл:

Ви можете вирішити не вказувати ім'я файлу, з якого слід побудувати, а просто побудувати його, вказавши шлях (таким чином, ім'я файлу повинно бути Dockerfileне доданим розширенням, наприклад:docker build -t docker-whale:tag path/to/Dockerfile

або

Ви можете вказати файл з , -fі це не має значення , що розширення (в розумних межах .txt, .dockerfile, і .Dockerfileт.д ..) ви вирішите використовувати, наприклад docker build -t docker-whale:tag /path/to/file -f docker-whale.dockerfile.


2

Я спочатку створив свій Dockerfile в PowerShell, і хоча я не побачив розширення у файлі, він показав як тип файлу PS ... як тільки я створив файл із Notepad ++ і обов'язково обрав файл "Усі типи ( . )" Введіть без розширення Ім'я файлу (Dockerfile). Це дозволило команді побудови зображень успішно виконати .... Просто переконайтеся, що у вашому Dockerfile є тип "Файл" ...


2

Проблема полягає в тому, що ім'я файлу має бути Dockerfile, а не DockerFile або dockerfile, воно повинно бути D великим капіталом з подальшим ockerfile у малій регістрі pls note


2

Будьте впевнені, що ви DOCKERfileзнаходитесь в КОРОТКІ каталогу додатків, у мене був сервер у src, який призвів до цієї помилки, оскільки Докер не знаходив шлях доDOCKERfile


1

Для створення Dockerfile збережіть автоматизований вміст у Dockerfile. не Dockerfile, оскільки під час відкриття файлової команди:

$ notepad Dockerfile 

(Текстовий файл записаний, щоб файл не міг побудувати)

Щоб скласти запуск файлу:

$ notepad Dockerfile

і тепер запустіть:

$ docker build -t docker-whale .

Переконайтеся, що ви перебуваєте в поточному каталозі Dockerfile.


1

Найголовніше переконайтесь, що ваше ім'я файлу - Dockerfileякщо ви використовуєте інше ім'я, воно не працюватиме (принаймні, це не було для мене.)

Крім того, якщо ви перебуваєте в тому ж режисі, де Dockerfile використовується .ie, docker build -t Myubuntu1:v1 . або використовуйте абсолютний шлях, тобто docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker


1

Я мій випадок (запускається з Windows 10)
1) Перейменуйте файл myDockerFile.Dockerfileна Dockerfile( без розширення файлу).
Потім запустіть із цієї папки цю команду:

docker build .\Docker-LocalNifi\ 

Це працює для мене та для моїх колег по роботі, сподіваюся, що також буде працювати для вас


1

Переконайтесь, що ім'я файлу "Dockerfile" не зберігається з будь-яким розширенням. Просто створіть файл без будь-якого розширення.

І переконайтеся, що Dockerfile знаходиться в тому самому каталозі, з якого ви намагаєтеся створити docker-зображення.


1

У випадку, якщо в нашому середовищі є кілька файлів докера, достатньо нашої вимоги.

docker build -t ihub -f Dockerfile.ihub .

Тому використовуйте команду file(-f аргумент), щоб вказати файл докера (Dockerfile.ihub)


Також потрібно мати .(крапку) в кінці рядка, як показано вище.
Purplejacket

Документацію docker buildможна знайти тут: docs.docker.com/engine/reference/commandline/build
Purplejacket

0

Я отримав це в Windows, коли шлях, над яким я працював, знаходився під каталогом Junction. Тож моя фіксація полягала в тому, щоб не працювати під цим шляхом.


0

На Mac він працює для команди нижче. (сподіваємось, що .Dockerfileце у вашому кореневому каталозі).

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

0

Проблема пов'язана з процедурою створення DockerFile.

Для роботи відкрийте cmd, cd до каталогу, що цікавить, та введіть:

abc>DockerFile

Це створить файл під назвою DockerFile всередині вашої папки.

Тепер введіть:

notepad DockerFile 

Це відкриє файл DockerFile у блокноті, і вам доведеться скопіювати / вставити стандартний код, що надається.

Збережіть файл і тепер, нарешті, створіть своє зображення за допомогою Docker:

docker build -t docker-whale . 

Це працює для мене, і я сподіваюся, що це допомагає іншим


0

Я помилково створив Dockerfile.txtу своєму робочому каталозі, що призводить до вищезгаданої помилкиbuild

Виправленням було видалення .txtрозширення з файлу.

Назва файлу має бути Dockerfileлише без будь-якого розширення .


0

Виконайте docker build -t getting-started .у своєму каталозі проектів і переконайтесь, що Dockerfile присутній і не має .txtрозширень. Якщо ви перебуваєте в ОС Windows, перевірте "Розширення імені файлу" на вкладці "Перегляд" у "Провідник файлів", щоб показати, чи є .txt, чи ні, і видаліть його, якщо попереднє вірно. Щасти.


0

Я також зіткнувся з тими ж проблемами, і це було вирішено, коли я створив файл з ім'ям DockerFile і згадав про всі команди, які хотів виконати під час створення будь-якого зображення.


0

Помилка означає, що docker buildабо використовується a, PATH | URLякий неправильно вводиться, або що його Dockerfileнеможливо знайти в поточному каталозі. Також переконайтеся, що під час запуску команди з інтегрованого терміналу (наприклад, bashвсередині вашого IDE або текстового редактора) у вас є права адміністратора на це. Найкраще, якщо ви можете перевірити PATHсвій термінал за допомогою pwdbash shellабо dirякщо ви користуєтеся простою cliпрограмою Windows) та скопіювати точний шлях, куди потрібно створити зображення.

docker build C:\windows\your_amazing_directory

docker build --help також покаже вам доступні варіанти, які можна використовувати у разі неправильних чи незаконних команд.


-1

Я спробував це, і це спрацювало:

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

Будь ласка, дивіться цитати + un-quotes навколо імені папки.

Примітка. У папці у "C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"мене є свій Dockerfile.


-1

Для створення зображення з командного рядка в Windows / linux. 1. Створіть файл докера у вашому поточному каталозі. наприклад: З ubuntu RUN apt-get update RUN apt-get -y встановити apache2 ADD. / var / www / html ENTRYPOINT apachectl -D ЗАБЕЗПЕЧЕНО ім'я ENV Devops_Docker 2. Не зберігайте його з розширенням .txt. 3. У командному рядку запустіть збірку докерних команд. -t apache2image

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.