我需要阻止所有注册表,并且只允许docker从一个私有注册表中提取图像,如何在docker中本地完成这一操作。
使用RedHat选项将无法在上游Docker CE或EE引擎上工作,RedHat已经分叉了Docker引擎,并添加了自己不兼容的功能。您还会发现/etc/sysconfig/docker是一个仅限RedHat的配置文件,设计用于与他们版本的启动脚本配合使用。我也不相信RedHat支持这个旧的fork,而是更喜欢他们自己的podman和crio运行时。
Linux Docker引擎目前不支持对注册表服务器的硬限制。服务器实现此功能的标准方法是使用出站连接的防火墙规则,但只需要允许到已知允许列表的出站连接。您仍然需要确保用户不会从tar文件导入图像,或者从头开始重建被阻止的图像(例如,Docker Hub上的所有官方图像都有重建它们的来源)。
有了Docker Desktop,在他们的付费业务层中添加了限制用户可以从哪些注册表中提取的功能,并提供了图像访问管理。
以前,我可能建议使用公证人和Docker内容信托来确保您只运行受信任的图像,但该工具存在各种已知问题,包括使用TOFU(首次使用时的信任),它允许任何人签署以前从未见过的repo中的任何图像并信任其运行。有一些尝试可以取代它,目前的领导者是sigstore/cosign,但它没有直接集成到docker引擎中。如果你在Kubernetes中运行,这将在你的准入控制器中配置,比如Gatekeeper或Kyverno。
刚刚在redhat文档中找到:
这可以在docker守护进程config:上完成
/etc/sysconfig/doker
BLOCK_REGISTRY='--block-registry=all'
ADD_REGISTRY='--add-registry=registry.access.redhat.com'
然后做:
systemctl restart docker