微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决正常构建时如何忽略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忽略这些标志吗?

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?