Phản hồi lỗi từ daemon: Không có giai đoạn xây dựng trong ngữ cảnh hiện tại


111

Tôi đang cố gắng chạy một vùng chứa với kvm, sử dụng mã mà tôi tìm thấy ở đây: https://github.com/jessfraz/dockerfiles/tree/master/kvm Tôi đã tạo một thư mục mới, cd'd vào đó và tạo dockerfile và tệp start.sh. Khi tôi ra lệnh xây dựng, nó xuất hiện thông báo lỗi sau:

Gửi ngữ cảnh xây dựng đến Docker daemon 3.584kB Phản hồi lỗi từ daemon: Không có giai đoạn xây dựng trong ngữ cảnh hiện tại

Tôi không biết điều này có nghĩa là gì và tôi không thể tìm kiếm câu trả lời. Mọi sự trợ giúp sẽ rất được trân trọng.

Câu trả lời:


206

Dockerfile của bạn có: FROM repo/image

Như dòng đầu tiên? Tôi gặp lỗi này khi quên chỉ định hình ảnh docker mà tôi đang tạo.

Ngay cả khi bạn đang xây dựng "hình ảnh nguồn", bạn vẫn cần chỉ định FROM scratchlà dòng đầu tiên của tệp dockerfile.


21
Tôi gặp sự cố này vì tôi đang đặt ENV cho giao diện người dùng debian trước lệnh FROM. Cảm ơn!
adamconkey

6
@adamconkey có một trường hợp đặc biệt mà bạn được phép có ARG trước FROM. Đó là thứ duy nhất được phép có trước FROM. Đây là một số thông tin khác về điều đó: docs.docker.com/engine/reference/builder/…
Paul Dejean

Nó không nhất thiết phải là dòng ĐẦU TIÊN. Nó chỉ phải là dòng đầu tiên không bình luận. Kiểm tra câu trả lời của tôi để biết liên kết đến tài liệu chính thức kèm theo lời giải thích.
NoBrainer

@NoBrainer Trong lập trình máy tính, thuật ngữ "dòng đầu tiên" hầu như luôn đề cập đến dòng không chú thích đầu tiên.
Paul Dejean

@PaulDejean Docker là quản trị hệ thống, không phải "lập trình máy tính". ;-)
NoBrainer,

36

Điều này thường xảy ra do văn bản được viết trước lệnh FROM. Hãy thử xóa các nhận xét trong tệp dockerfile của bạn và tạo lại.

Để tham khảo https://github.com/moby/buildkit/issues/164


1
Đây chính xác là vấn đề của tôi, vì một số lý do ngay cả những thứ tôi đã nhận xét cũng khiến nó gặp lỗi này. Tôi đã gỡ bỏ tất cả và hiện hoạt động tốt.
jamescampbell

Nhận xét không gây ra cho tôi bất kỳ vấn đề. Kiểm tra câu trả lời của tôi để biết liên kết đến tài liệu chính thức kèm theo lời giải thích.
NoBrainer

18

Thông báo này xuất hiện khi bạn khai báo một biến môi trường ( ENV) trước khi khai báo FROM.

Ví dụ:

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

Để giải quyết điều này, hãy hoán đổi các khai báo để bất kỳ biến môi trường nào được đặt sau đó 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

Theo tài liệu trên docs.docker.com , dòng không phải chú thích đầu tiên trong Dockerfile của bạn phải là FROMdòng. Để trích dẫn các tài liệu:

Các FROMhướng dẫn khởi một xây dựng giai đoạn mới và đặt Image Base để được hướng dẫn tiếp theo. Như vậy, một hợp lệ Dockerfilephải bắt đầu bằng một FROMchỉ dẫn.


sử dụng FROM anyBaseImagehoặc sử dụngFROM scratch
ahmednabil88

12

Vấn đề đã được giải quyết. Khi tôi vào dockerfile để chỉnh sửa mã, tôi nhận thấy rằng tôi đã vô tình bỏ ghi chú dòng đầu tiên. Sai lầm ngu ngốc, tôi biết. Cảm ơn hai bạn vì sự giúp đỡ.


6

Tôi gặp vấn đề tương tự! Điều đã giúp tôi là FROMlệnh làm lệnh đầu tiên trong tệp :

XẤU :

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

TỐT :

FROM dockerimagename
MAINTAINER your name "your@email.com"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.