簡體   English   中英

為什么 docker 構建失敗:無法解析 Dockerfile:沒有說明的文件

[英]Why does docker build fail with: failed to parse Dockerfile: file with no instructions

我第一次嘗試使用 Docker 用於我的 Django 項目,使用“Django For Professionals”一書,但是當我輸入“Docker build”時,我不斷收到構建錯誤。 幾天。 我查看了其他堆棧溢出帖子( 錯誤,“無法使用前端 dockerfile.v0 解決” ),但它仍然無法正常工作。 這是我得到的錯誤代碼。

$> docker build .            
[+] Building 0.1s (2/2) FINISHED                                                                                                                                                                            
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 419B                                                                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
failed to solve with frontend dockerfile.v0: failed to create LLB definition: file with no instructions

$> export DOCKER_BUILDKIT=0 
export COMPOSE_DOCKER_CLI_BUILD=0

$> docker build .           
Sending build context to Docker daemon  179.2kB
Error response from daemon: failed to parse Dockerfile: file with no instructions 

我的 Django 項目中有我的 Dockerfile,它如下:

FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

COPY . /code/

我試過貓 Dockerfile,這是 output:

yoonjaeseo@Yoons-MacBook-Pro hello % cat Dockerfile
WORKDIR /coderectory 1ECODE 1

COPY . /code/% 

如果需要任何其他信息,請告訴我。 謝謝!

Docker 在運行docker build.時默認使用名為Dockerfile的文件。 .

為了以不同的名稱使用 Dockerfile,您必須將其指定為docker build命令的參數,例如:

docker build -f your.custom.dockerfile.name .

它將使用your.custom.dockerfile.name作為 Dockerfile 來構建。

從 output:

% cat Dockerfile
WORKDIR /coderectory 1ECODE 1

COPY . /code/% 

您的 Dockerfile 似乎已損壞,或者可能以錯誤的文本格式保存。 可能缺少 docker 解析文件所需的換行符(由出現在行尾的提示判斷)。 確保已將其保存在 utf-8 或帶有 Linux 換行符的 ascii 文本中(lf,而不是 cr-lf)。

如果您無法在文本編輯器中修復此問題,請從 cli 運行以下命令:

cat >Dockerfile <<EOF
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

COPY . /code/
EOF

您正在使用文件夾中相同層次結構的多個 docker 文件,因為它看起來和具有不同的名稱。 文件名應該是 Dockerfile 因為這是標准文件名,或者可以在命令行中給出不同的 docker 文件名。

folder1

 --Dockerfile

當您執行 docker 構建時,它應該在文件夾 1 中運行。 如果您有其他要求,請更新問題並提供更多詳細信息。

試試這個,它對我有用

FROM python:3.9-alpine3.13
LABEL maintainer="admin@example.com"

ENV PYTHONUNBUFFERED 1
COPY ./code /code

WORKDIR /code
EXPOSE 8000
RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip && \
    adduser --disabled-password --no-create-home app

ENV PATH="/py/bin:$PATH"
#switches the "root" user to the "app" user
USER app



你錯過了一些東西,一旦你用它的內容創建了你的Dockerfile ,你需要用CMD啟動你的應用程序,它應該像這樣使用: CMD ["executable", "param1", "param2"…] 您也可以改用 ENTRYPOINT(指定 am 初始化腳本): ENTRYPOINT filename ,然后CMD可用於添加參數。

重要提示:任何 Docker 映像都必須具有ENTRYPOINTCMD聲明才能啟動容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM