来自守护程序的错误响应:当前上下文中没有构建阶段

时间:2018-05-21 16:19:01

标签: docker kvm

我尝试使用我在此处找到的代码运行带有kvm的容器:https://github.com/jessfraz/dockerfiles/tree/master/kvm 我创建了一个新目录,cdd并创建了dockerfile和start.sh文件。 当我下令构建时,它输出了以下错误消息:

将构建上下文发送到Docker守护程序3.584kB 来自守护程序的错误响应:当前上下文中没有构建阶段

我不知道这意味着什么,我无法谷歌回答。 任何帮助将不胜感激。

9 个答案:

答案 0 :(得分:74)

您的dockerfile是否有:FROM repo/image

作为第一线?当我忘记指定我正在构建的泊坞窗图像时,我收到此错误。

即使你正在构建“源图像”,你仍然需要指定FROM scratch作为dockerfile的第一行。

答案 1 :(得分:18)

这通常是因为在FROM命令之前写入的文本。尝试删除dockerfile中的注释并重新构建。

供参考https://github.com/moby/buildkit/issues/164

答案 2 :(得分:10)

问题得到解决。 当我去dockerfile编辑代码时,我注意到我不小心取消了第一行的注释。愚蠢的错误,我知道。 谢谢你们的帮助。

答案 3 :(得分:6)

我遇到了同样的问题!帮助我的是FROM命令作为文件中的第一个命令

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

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

答案 4 :(得分:0)

在声明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 :(得分:0)

根据documentation on docs.docker.com,Dockerfile的第一行非注释行必须为FROM行。引用文档:

  

FROM指令初始化一个新的构建阶段,并为后续指令设置Base Image。因此,有效的Dockerfile必须以FROM指令开头。

答案 6 :(得分:0)

我不认为这是您的情况,但它可能会帮助其他人解决该错误。

  1. 我的 Dockerfile 运行时没有出现该错误。
  2. 我在 Dockerfile 的开头添加了“FROM vcatechnology/linux-mint:18.2”,也没有错误。
  3. 再次删除该 FROM 语句后,它仍在搜索它,导致此错误。
  4. 我只能通过再次添加 FROM 语句来消除错误。

因此,如果您使用了以 FROM 语句开头的 Dockerfile,然后再次删除该 FROM 语句,就会出现此错误。

答案 7 :(得分:0)

就我而言,我将 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

答案 8 :(得分:0)

这是我的情况,因为我在 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/