Odpowiedź na błąd od demona: Brak etapu kompilacji w bieżącym kontekście

116

Próbowałem uruchomić kontener z kvm, używając kodu, który znalazłem tutaj: https://github.com/jessfraz/dockerfiles/tree/master/kvm Stworzyłem nowy katalog, do niego cd-dałem i utworzyłem plik dockerfile i pliki start.sh. Kiedy wydałem polecenie kompilacji, wyświetlił się następujący komunikat o błędzie:

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

Nie mam pojęcia, co to oznacza i nie mogłem znaleźć w Google odpowiedzi. Jakaś pomoc?

user3710626
źródło

Odpowiedzi:

213

Czy twój plik dockerfile ma: FROM repo/image

Jako pierwsza linia? Pojawił się ten błąd, gdy zapomniałem określić obraz Dockera, z którego budowałem.

Nawet jeśli tworzysz „obraz źródłowy”, nadal musisz określić FROM scratchjako pierwszą linię pliku dockerfile.

Paul Dejean
źródło
21
Miałem ten problem, ponieważ ustawiałem ENV dla frontendu Debiana przed poleceniem FROM. Dzięki!
adamconkey
7
@adamconkey jest specjalny przypadek, w którym możesz mieć ARG przed FROM. To jedyna rzecz, która może być przed OD. Oto więcej informacji na ten temat: docs.docker.com/engine/reference/builder/ ...
Paul Dejean
Niekoniecznie jest to PIERWSZA linia. To musi być pierwsza linia bez komentarza. Sprawdź moją odpowiedź, aby uzyskać link do oficjalnej dokumentacji z wyjaśnieniem.
NoBrainer
@NoBrainer W programowaniu komputerowym termin „pierwsza linia” prawie zawsze odnosi się do pierwszej linii bez komentarza.
Paul Dejean
36

Dzieje się tak zwykle z powodu tekstu, który jest zapisywany przed poleceniem OD. Spróbuj usunąć komentarze z pliku dockerfile i skompiluj ponownie.

W celach informacyjnych https://github.com/moby/buildkit/issues/164

Yonah Dissen
źródło
1
To był dokładnie mój problem, z jakiegoś powodu nawet rzeczy, które skomentowałem, powodowały, że wyrzucał ten błąd. Usunąłem to wszystko i teraz działa dobrze.
jamescampbell
Komentarze nie sprawiły mi żadnych problemów. Sprawdź moją odpowiedź, aby uzyskać link do oficjalnej dokumentacji z wyjaśnieniem.
NoBrainer
19

Ten komunikat pojawia się, gdy deklarujesz zmienną środowiskową ( ENV) przed deklaracją FROM.

Na przykład:

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

Aby rozwiązać ten problem, zamień deklaracje, tak aby wszystkie zmienne środowiskowe były ustawione po 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
...
Charlie
źródło
18

Zgodnie z dokumentacją na docs.docker.com , pierwszym wierszem nie będącym komentarzem w pliku Dockerfile musi być FROMwiersz. Cytując dokumenty:

FROMInstrukcja inicjuje nowy etap budowania i ustawia obrazie bazowym dla kolejnych instrukcji. W związku z tym ważne Dockerfilemusi zaczynać się od FROMinstrukcji.

NoBrainer
źródło
użyj albo FROM anyBaseImageużyjFROM scratch
ahmednabil88
12

Problem został rozwiązany. Kiedy przeszedłem do dockerfile, aby edytować kod, zauważyłem, że przypadkowo odkomentowałem pierwszą linię. Wiem, głupi błąd. Dziękuję obojgu za pomoc.

user3710626
źródło
6

Miałem ten sam problem! Pomogło mi posiadanie FROMpolecenia jako pierwszego polecenia w pliku :

ZŁE :

MAINTAINER your name "[email protected]"
FROM dockerimagename

DOBRY :

FROM dockerimagename
MAINTAINER your name "[email protected]"
Aleksandras Urbonas
źródło