有一个先前的问题(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凭据,这似乎是受支持的方法。任何人都对导致问题的原因有想法吗?
答案 0 :(得分:7)
如果您将sudo
用于docker命令,则可能需要:
sudo DOCKER_BUILDKIT=1 ...
答案 1 :(得分:6)
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”的奇怪错误的原因!呸!
希望这可以为少数人节省几个小时的时间。