来自守护程序的错误响应:Dockerfile解析错误未知标志:mount

dffbzjpn  于 2023-11-17  发布在  Docker
关注(0)|答案(6)|浏览(302)

之前有一个问题(Docker Unknown flag --mount)也遇到了同样的错误,这是由于运行的Docker版本过期。我运行的是最新版本的Docker。
下面是Dockerfile

FROM continuumio/miniconda3

RUN --mount=type=ssh pip install git+ssh://[email protected]/myrepo/myproject.git@develop
RUN conda install numpy
...

字符串
根据文档,我应该能够简单地运行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凭据,这似乎是支持的方法。有人认为是什么导致了这个问题吗?

xjreopfe

xjreopfe1#

tl;干

Dockerfile

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

RUN --mount=type=ssh pip install git+ssh://[email protected]/myrepo/myproject.git@develop
RUN conda install numpy
...

字符串

  • 注意:*第一行注解为必填voodoo

然后构建你的docker镜像:

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


这样,你就可以在Dockerfile中为RUN指令使用--mount选项。

长回答

如这里的文档所示,构建docker镜像时的 ssh forwarding 仅在使用BuildKit后端时启用:

外部实现功能

此功能仅在使用BuildKit后端时可用。
Docker build支持实验性功能,如缓存挂载,构建秘密和ssh转发,这些功能通过使用带有语法指令的构建器的外部实现来启用。要了解这些功能,请访问refer to the documentation in BuildKit repository
为此,您需要Docker 18.09(或更高版本),还需要使用**DOCKER_BUILDKIT=1环境变量运行docker build命令,并使用以下magic comment**启动Docker文件:# syntax=docker/dockerfile:experimental
您也可以编辑/etc/docker/daemon.json并添加:

{
    "experimental" : false,
    "debug" : true,
    "features": {
        "buildkit" : true
    }
}

hec6srdp

hec6srdp2#

如果你使用sudo作为docker命令,你可能需要:
sudo DOCKER_BUILDKIT=1 ...

ddhy6vgd

ddhy6vgd3#

对于那些可能正在与这种错误作斗争的人:确保文件的第一行是'# 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'的奇怪错误!
希望这能从几个人的生命中保存几个小时。

gev0vcfq

gev0vcfq4#

由于在Dockerfile中写入--mount而导致的错误消息。您必须首先启用Docker BuildKit才能使用此语法。
您可以通过here检查所有当前可用的构建选项

vcudknz3

vcudknz35#

在本地我只需要DOCKER_BUILDKIT=1 docker build.
在TeamCity构建管道中,我的Docker文件仍然需要魔法行来克服这个问题。我的TeamCity代理运行的是Docker版本19.03.9
2022年,这是我的结论:
1.尝试Docker文件顶部提到的神奇代码行:#syntax=docker/dockerfile:experimental
1.使用BUILD KIT。例如DOCKER_BUILD KIT =1
..在我的上下文中,这都是为了运行下面这行:
运行--mount=type=ssh npm install“git+ssh:// email protected(https://stackoverflow.com/cdn-cgi/l/email-protection):dra_.git”
也许这会为保存一些人节省一些时间。

exdqitrt

exdqitrt6#

也许这可以帮助一些人:
我也面临着类似的问题,
第一个月
我用Docker version 19.03.13, build 4484c46d9d
我刚把这个更新到docker 20.10.24

相关问题