我尝试使用我在此处找到的代码运行带有kvm的容器:https://github.com/jessfraz/dockerfiles/tree/master/kvm 我创建了一个新目录,cdd并创建了dockerfile和start.sh文件。 当我下令构建时,它输出了以下错误消息:
将构建上下文发送到Docker守护程序3.584kB 来自守护程序的错误响应:当前上下文中没有构建阶段
我不知道这意味着什么,我无法谷歌回答。 任何帮助将不胜感激。
答案 0 :(得分:74)
您的dockerfile是否有:FROM repo/image
作为第一线?当我忘记指定我正在构建的泊坞窗图像时,我收到此错误。
即使你正在构建“源图像”,你仍然需要指定FROM scratch
作为dockerfile的第一行。
答案 1 :(得分:18)
这通常是因为在FROM命令之前写入的文本。尝试删除dockerfile中的注释并重新构建。
答案 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)
我不认为这是您的情况,但它可能会帮助其他人解决该错误。
因此,如果您使用了以 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/