2

我有一个 docker 容器,有时我想用buildkit构建它,其他时候用标准 docker build 构建。假设我们有一个容器,例如:

# 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当我们从我们的私有存储库 pip 安装东西时,我们使用该标志告诉 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 忽略这些标志吗?

4

1 回答 1

2

考虑到忽略未知标志的方法是否有用,有一个开放的 RFC 问题。但是,为任何未知标志自动执行此操作可能会导致比修复更多的损坏。例如,通过挂载 ssh 凭据,如果没有凭据,构建很可能会失败。

在这种情况下,建议倾向于为基于 buildkit 的构建维护一个单独的 Dockerfile,并手动保持它们同步,或者推动使用 buildkit 或经典构建器完成所有构建,但不能同时使用两者。

于 2020-10-21T23:45:56.127 回答