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

PMe*_*nde 14 docker dockerfile

先前有一个问题(Docker Unknown标志--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
...
Run Code Online (Sandbox Code Playgroud)

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

Sending build context to Docker daemon  2.048kB
Error response from daemon: Dockerfile parse error line 3: Unknown flag: mount
Run Code Online (Sandbox Code Playgroud)

输出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
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*eil 17

tl; dr

Docker文件

# 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
...
Run Code Online (Sandbox Code Playgroud)

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

# 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
...
Run Code Online (Sandbox Code Playgroud)

有了这个,你就可以使用--mount选项RUN您Dockerfile指令。


长答案

由于文档中找到这里ssh的转发建筑搬运工图像时使用的时候才启用BuildKit后端:

外部实施功能

仅当使用BuildKit 后端时,此功能才可用 。

Docker build supports experimental features like cache mounts, build secrets and ssh forwarding that are enabled by using an external implementation of the builder with a syntax directive. To learn about these features, refer to the documentation in BuildKit repository.

For this you need Docker 18.09 (or later) and you also need to run the docker build command with the DOCKER_BUILDKIT=1 environment variable and start your Docker file with the following magic comment: # syntax=docker/dockerfile:experimental.

  • 事实证明,我必须在Dockerfile中放置以下标头:`#语法= docker / dockerfile:1.0.0-experimental`。现在,我在主机密钥验证上遇到了失败。取得进展! (5认同)
  • 感谢您的回复。我尝试了这个,并得到了一个新错误:`未能创建LLB定义:Dockerfile解析错误行3:未知标志:mount`。 (2认同)
  • 2个小时,2个小时,最后我需要把这个评论放在我的Dockerfile中“#syntax=docker/dockerfile:experimental” (2认同)
  • 这个答案应该得到更多的赞赏。 (2认同)
  • 为什么它在本地没有此注释行的情况下也能工作,但在 GitLab CI 作业上却需要这个神奇的注释? (2认同)

XDS*_*XDS 10

对于可能遇到此类错误的任何人:确保文件的第一行是“#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 ./...
Run Code Online (Sandbox Code Playgroud)

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

# 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 ./...
Run Code Online (Sandbox Code Playgroud)

那么 'syntax=...' 将不会被考虑,因为它不再位于第一行。这就是为什么您会收到下面关于“安装”的奇怪错误!嘎!

希望这能挽救一些人的生命几个小时。


Nis*_*ant 7

如果您使用的sudo是 docker 命令,您可能需要:

sudo DOCKER_BUILDKIT=1 ...

  • 在变量之后使用 sudo 不起作用哈哈,只是浪费了几个小时才意识到这一点。 (2认同)

Mos*_*ein 6

您由于--mount在 .txt 文件中写入而收到的错误消息Dockerfile。您必须首先启用 Docker BuildKit 才能使用此语法。

您可以通过此处检查所有当前可用的构建选项

  • @AlexisWilke 一般而言,使用 Docker Compose 可以使用 Buildkit。只需使用:“COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build”运行即可。似乎特殊的“--mount”参数,例如构建时秘密(https://github.com/docker/compose/pull/7046)或ssh(https://github.com/docker/compose/issues/) 7252)还不是其中的一部分。 (6认同)