Ошибка ответа от демона: в текущем контексте нет стадии сборки

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

Отправка контекста сборки на Docker daemon 3.584kB Ответ на ошибку от демона: нет стадии сборки в текущем контексте

Я понятия не имею, что это значит, и я не мог ответить Google. Любая помощь будет принята с благодарностью.

Ответ 1

У вашего файла dockerfile есть: FROM repo/image

Как первая строка? Я получил эту ошибку, когда забыл указать изображение докеры, из которого я строил.

Даже если вы создаете "исходное изображение", вам все равно нужно указать FROM scratch как первую строку файла docker.

Ответ 2

Обычно это происходит из-за текста, который написан перед командой FROM. Попробуйте удалить комментарии в файле docker и снова создать.

Для справки https://github.com/moby/buildkit/issues/164

Ответ 3

Проблема устранена. Когда я пошел в dockerfile для редактирования кода, я заметил, что я случайно раскоментировал первую строку. Глупая ошибка, я знаю. Спасибо вам за помощь.

Ответ 4

Это сообщение появляется, когда вы объявляете переменную окружения (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
...

Ответ 5

Согласно документации на docs.docker.com, первая строка без комментариев в вашем Dockerfile должна быть строкой FROM. Цитировать документы:

Инструкция FROM инициализирует новый этап сборки и устанавливает базовый образ для последующих инструкций. Таким образом, действительный Dockerfile должен начинаться с инструкции FROM.