【问题标题】:How to ignore docker buildkit flags when building normally正常构建时如何忽略docker buildkit标志
【发布时间】:2021-02-04 22:09:30
【问题描述】:

我有一个 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 标志告诉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 忽略这些标志吗?

【问题讨论】:

    标签: docker docker-buildkit


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这可以解决问题。我将为我的用例探索其中一个选项:)
    猜你喜欢
    • 2018-08-19
    • 2021-06-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多