来自守护程序的错误响应:Dockerfile分析错误未知标志:安装

时间:2019-03-14 00:21:53

标签: docker dockerfile

有一个先前的问题(Docker Unknown flag --mount)面临着相同的错误,该错误是由于运行了一个过时的Docker版本而引起的。我正在运行最新版本的Docker。

我有以下Dockerfile

FROM continuumio/miniconda3

RUN --mount=type=ssh pip install git+ssh://git@github.com/myrepo/myproject.git@develop
RUN conda install numpy
...

根据documentation,我应该能够简单地运行docker build --ssh default .。但是,我收到以下错误:

Sending build context to Docker daemon  2.048kB
Error response from daemon: Dockerfile parse error line 3: Unknown flag: mount

docker version的输出:

Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     true

我想构建一个Docker映像而不暴露我的私人SSH凭据,这似乎是受支持的方法。任何人都对导致问题的原因有想法吗?

5 个答案:

答案 0 :(得分:7)

如果您将sudo用于docker命令,则可能需要:

sudo DOCKER_BUILDKIT=1 ...

答案 1 :(得分:6)

tl; dr

Dockerfile

# syntax=docker/dockerfile:experimental
FROM continuumio/miniconda3

RUN --mount=type=ssh pip install git+ssh://git@github.com/myrepo/myproject.git@develop
RUN conda install numpy
...

然后使用以下命令构建您的docker映像:

DOCKER_BUILDKIT=1 docker build --ssh default -t my_image .

这样,您就可以在Dockerfile中的RUN指令中使用--mount option


长答案

如文档here中所述,仅当使用BuildKit后端时,启用构建docker映像时的 ssh转发

  

外部实施功能

     

仅当使用   BuildKit   后端。

     

Docker构建支持实验性功能,例如缓存安装,构建   通过使用外部启用的机密和ssh转发   带有语法指令的构建器的实现。学习关于   这些功能refer to the documentation in BuildKit repository

为此,您需要 Docker 18.09 (或更高版本),还需要使用 docker build 环境变量运行DOCKER_BUILDKIT=1命令,并使用以下魔术注释启动您的Docker文件:# syntax=docker/dockerfile:experimental

答案 2 :(得分:1)

由于在--mount中写入Dockerfile而导致的错误消息。您必须先启用Docker BuildKit才能使用此语法。

您提到的问题与docker run命令有关不是 docker build命令,与Dockerfile有关。

您可以通过here

检查所有当前可用的构建选项

答案 3 :(得分:0)

我在 Docker v19 中也收到了这个错误并将其更新到最新版本解决了我的问题。

按照 docker 指令 here

答案 4 :(得分:0)

致可能正在为此类错误而苦苦挣扎的任何人:确保文件的第一行是“#syntax=docker/dockerfile:experimental”。这将起作用:

# syntax=docker/dockerfile:experimental
FROM golang:1.14.1 as builder

...    

RUN --mount=type=ssh  GOSUMDB=off go get -d -v ./...

但是,如果您在文件开头添加注释,如下所示:

# SOME SILLY COMMENT HERE  <--- this ostensibly innocent comment ruins everything!

# syntax=docker/dockerfile:experimental
FROM golang:1.14.1 as builder

...    

RUN --mount=type=ssh  GOSUMDB=off go get -d -v ./...

然后 'syntax=...' 将不会被考虑在内,因为它不再在第一行。这就是为什么您会在下面收到有关“mount”的奇怪错误的原因!呸!

希望这可以为少数人节省几个小时的时间。