正常构建时如何忽略 docker buildkit 标志
How to ignore docker buildkit flags when building normally
我有一个 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 在我们从我们的私有存储库进行 pip 安装时使用这里的 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
标志无法识别。无论如何,是否可以使用相同的 Docker 文件而不使用 buildkit 和正常情况下对其进行编辑?可以告诉 Docker 忽略这些标志吗?
有一个 open RFC issue 用于考虑忽略未知标志的方法是否有用。然而,对任何未知标志自动执行此操作可能会导致比修复更多的损坏。例如,安装 ssh 凭据时,如果没有凭据,构建很可能会失败。
在这种情况下,建议要么为具有所有功能的基于 buildkit 的构建维护一个单独的 Dockerfile 并手动保持它们同步,要么推动使用 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 在我们从我们的私有存储库进行 pip 安装时使用这里的 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
标志无法识别。无论如何,是否可以使用相同的 Docker 文件而不使用 buildkit 和正常情况下对其进行编辑?可以告诉 Docker 忽略这些标志吗?
有一个 open RFC issue 用于考虑忽略未知标志的方法是否有用。然而,对任何未知标志自动执行此操作可能会导致比修复更多的损坏。例如,安装 ssh 凭据时,如果没有凭据,构建很可能会失败。
在这种情况下,建议要么为具有所有功能的基于 buildkit 的构建维护一个单独的 Dockerfile 并手动保持它们同步,要么推动使用 buildkit 或经典构建器完成所有构建,但不是两者。