正常构建时如何忽略docker buildkit标志

时间:2020-10-21 23:14:04

标签: docker docker-buildkit

我有一个Docker容器,我有时想用buildkit来构建,而其他时候则要用标准的docker来构建。想象我们有一个像这样的容器:

# syntax=docker/dockerfile:experimental
FROM python:3.8

# Install all necessary libraries into a pyenv environment
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
RUN --mount=type=ssh pip install -r api-requirements.txt

当我们从私有存储库中点安装东西时,我们使用--mount=type=ssh标志告诉buildkit在这里使用ssh密钥。当您使用Buildkit通过以下命令进行构建时,一切工作正常:

ssh-add && cd api && DOCKER_BUILDKIT=1 docker build --no-cache --ssh default -t image-name .

但是,我们不再可以使用标准的docker命令来构建此容器:

docker build -t image-name .

因为无法识别--mount标志。无论如何,是否需要使用相同的Dockerfile而不用buildkit和通常对其进行编辑?可以告诉Docker忽略这些标志吗?

1 个答案:

答案 0 :(得分:2)

有一个open RFC issue用于考虑是否可以使用忽略未知标志的方法。但是,对于任何未知标志自动执行此操作可能会导致更多的损坏,而不是其修复的结果。例如,随着ssh凭证的安装,如果没有凭证,构建很可能会失败。

在这种情况下,建议通常是为具有所有功能的基于buildkit的构建维护一个单独的Dockerfile,并手动使其保持同步,或者倾向于使用buildkit或经典构建器来完成所有构建,但不建议这样做两者。

相关问题