【问题标题】:Error response from daemon: failed to parse Dockerfile: file with no instructions来自守护进程的错误响应:解析 Dockerfile 失败:没有说明的文件
【发布时间】:2019-11-21 15:26:10
【问题描述】:

下面是我的 docker 文件。

FROM node:6-alpine
EXPOSE 3000
RUN apk add -update tini
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm install && npm cache clean
COPY . .
CMD [ "tini","--","node","./bin/www" ]

我正在使用命令在 Windows 上运行它

docker build -t testnode .

遇到错误

Sending build context to Docker daemon  443.4kB
Error response from daemon: failed to parse Dockerfile: file with no instructions.

我的文件中没有多余的空间,编码是 ANSI。

【问题讨论】:

标签: windows docker dockerfile docker-machine


【解决方案1】:

试试这个 -

FROM node:6-alpine
EXPOSE 3000
RUN apk add --update tini
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm install
RUN npm cache clean --force
COPY . .
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "node", "./bin/www" ]
  • ENTRYPOINT 应在将容器用作 可执行。
  • CMD 应该用作定义默认参数的一种方式 对于 ENTRYPOINT 命令或在 容器。

这里“node”和“./bin/www”作为参数传递给“/sbin/tini”可执行文件。

查看此stackoverflow answer,详细了解ENTRYPOINTCMD

我相信您正在学习 Bret Fisher 的 Docker Mastery 教程。学习愉快!!

【讨论】:

    【解决方案2】:

    我能够重现此错误的方法是创建一个仅包含注释的 Dockerfile:

    $ echo '#' >df.comment
    
    $ docker build -f df.comment .
    [+] Building 0.1s (2/2) FINISHED                                                                                                                                                                                   
     => [internal] load build definition from df.comment                                                                                                                                                          0.0s
     => => transferring dockerfile: 45B                                                                                                                                                                           0.0s
     => [internal] load .dockerignore                                                                                                                                                                             0.0s
     => => transferring context: 34B                                                                                                                                                                              0.0s
    failed to solve with frontend dockerfile.v0: failed to create LLB definition: file with no instructions
    

    请注意,仍然会构建一个没有入口点或 cmd 的空图像,因此尝试使用这些行来修复它会向您发送错误的方法:

    $ more df.scratch 
    FROM scratch
    LABEL image=scratch
    
    $ docker build -f df.scratch .
    [+] Building 0.3s (3/3) FINISHED                                                                         
     => [internal] load build definition from df.scratch                                                0.0s
     => => transferring dockerfile: 76B                                                                 0.0s
     => [internal] load .dockerignore                                                                   0.0s
     => => transferring context: 34B                                                                    0.0s
     => exporting to image                                                                              0.0s
     => => writing image sha256:874d031dd4b7103a9f4159a2bc82c7d21e1885aa477150105d482b3e0462aa7e        0.0s
    

    至于为什么你的文件不工作,几乎可以肯定是和文件的编码有关。从 CLI 而不是编辑器,尝试cat Dockerfile,您应该会看到文件内容,在行的开头有FROM 之类的步骤。如果文件看起来损坏或缺少换行符,则说明它没有以正确的格式保存。通常你会使用 utf-8,ascii 也应该可以工作,换行设置为 Linux 格式(LF,而不是 CR-LF)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 2021-02-23
      • 2021-02-20
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多