Відповідь помилки від демона: У поточному контексті немає етапу збірки


111

Я намагався запустити контейнер з kvm, використовуючи код, який я знайшов тут: https://github.com/jessfraz/dockerfiles/tree/master/kvm Я створив новий каталог, cd'd в нього і створив файл docker і файли start.sh. Коли я дав наказ побудувати, воно видало таке повідомлення про помилку:

Надсилання контексту побудови до демона Docker 3.584kB Відповідь помилки від демона: У поточному контексті немає етапу побудови

Я поняття не маю, що це означає, і я не міг відповісти на Google. Будь-яка допомога буде вдячна.

Відповіді:


205

Чи має ваш файл docker: FROM repo/image

Як перший рядок? Я отримав цю помилку, коли забув вказати образ докера, з якого будував.

Навіть якщо ви створюєте "вихідне зображення", вам все одно потрібно вказати FROM scratchяк перший рядок докер-файлу.


21
У мене була ця проблема, оскільки я встановлював ENV для інтерфейсу debian перед командою FROM. Дякую!
adamconkey

6
@adamconkey є особливий випадок, коли вам дозволено мати ARG перед FROM. Це єдине, що дозволено бути до FROM. Ось додаткова інформація про це: docs.docker.com/engine/reference/builder/…
Пол Дежан,

Це не обов'язково ПЕРША лінія. Це просто має бути перший рядок, який не коментує. Перевірте мою відповідь на посилання на офіційну документацію з поясненнями.
NoBrainer

@NoBrainer У комп'ютерному програмуванні термін "перший рядок" майже завжди відноситься до першого рядка, що не коментує.
Пол Дежан,

@PaulDejean Docker - це системне адміністрування, а не "комп'ютерне програмування". ;-)
NoBrainer

34

Зазвичай це відбувається через текст, який написаний перед командою FROM. Спробуйте видалити коментарі у вашому файлі docker і побудуйте знову.

Для довідки https://github.com/moby/buildkit/issues/164


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

Коментарі не викликали у мене жодних проблем. Перевірте мою відповідь на посилання на офіційну документацію з поясненнями.
NoBrainer

17

Це повідомлення з'являється, коли ви оголошуєте змінну середовища ( ENV) перед оголошенням FROM.

Наприклад:

# Define variables.
ARG PORT
ENV SERVER_PORT=$PORT

# Install minimal Python 3.
FROM python:3.7-alpine

# Install Python requirements.
COPY requirements.txt /
RUN pip install -r /requirements.txt

# Copy app source code.
COPY src/ /app
...

Щоб вирішити цю проблему, поміняйте місця місцями декларації таким чином, щоб після встановлено будь-які змінні середовища FROM.

# Install minimal Python 3.
FROM python:3.7-alpine

# Define variables.
ARG PORT
ENV SERVER_PORT=${PORT}

# Install Python requirements.
COPY requirements.txt /
RUN pip install -r /requirements.txt

# Copy app source code.
COPY src/ /app
...

16

Згідно з документацією на docs.docker.com , першим рядком вашого файлу Docker, який не коментує, повинен бути FROMрядок. Щоб процитувати документи:

FROMІнструкція инициализирует новий етап збірки і встановлює зображення бази для подальших інструкцій. Таким чином, дійсний Dockerfileповинен починатися з FROMінструкції.


використовувати будь-який FROM anyBaseImage або використовуйтеFROM scratch
ahmednabil88

12

Проблема вирішена. Коли я пішов у dockerfile для редагування коду, я помітив, що випадково прокоментував перший рядок. Дурна помилка, я знаю. Дякую вам за допомогу.


6

У мене було те саме питання! Що мені допомогло, так це матиFROM команда була першою командою у файлі :

БАД :

MAINTAINER your name "your@email.com"
FROM dockerimagename

ДОБРЕ :

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