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

Sending build context to Docker daemon  3.584kB
Error response from daemon: No build stage in current context

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

user3710626

Ответов: 9

Ответы (9)

Есть ли в вашем dockerfile: FROM репо / образ

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

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

У меня была такая же проблема! Что мне помогло, так это то, что имеет команду FROM в качестве первой команды в файле:

ПЛОХО:

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

ХОРОШО:

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

В моем случае я изменил RUN на FROM.

Старый Dockerfile:

RUN php:8-apache

COPY /src var/www/html/

ENV APACHE_DOCUMENT_ROOT ./src/public/

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf

RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

EXPOSE 80

Новый файл Dockerfile:

FROM php:8-apache

COPY /src var/www/html/

ENV APACHE_DOCUMENT_ROOT ./src/public/

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf

RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

EXPOSE 80

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

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

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

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

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

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

Не думаю, что это ваш случай, но это может помочь кому-то другому с этой ошибкой.

  1. Мой файл Dockerfile работал без этой ошибки.
  2. Я добавил «FROM vcatechnology / linux-mint: 18.2» в начало файла Docker, ошибки тоже нет.
  3. После повторного удаления этого оператора FROM он все еще искал его, вызывая эту ошибку.
  4. Я смог избавиться от ошибки, только снова добавив оператор FROM.

Таким образом, эта ошибка может просто появиться, если вы использовали Dockerfile, начиная с оператора FROM, а затем снова отбросили этот оператор FROM.

Это был мой случай, потому что у меня было указано ENV перед FROM, и, как уже упоминалось, FROM должно быть первым выражением в вашем Dockerfile.

НО

Поскольку этот PR https://github.com/moby/moby/pull/31352, вы можете указать ARG перед FROM, что может быть подходящей альтернативой для вас.

Так я поменял

ENV MY_VAR 1
FROM ...
От

до

ARG MY_VAR=1
FROM ...

Кстати, о разнице между ARG и ENV вы можете прочитать здесь https://vsupalov.com/docker-arg-vs-env/

2022 WebDevInsider