我想使用来自 DockerHub 的镜像。我信任容器所针对的应用程序,并且我信任维护人员在他们的应用程序获得更新时更新 DockerHub 镜像。但是,我不信任他们 docker build --pull
每次使用的基础镜像获得更新时(例如当他们FROM debian:bullseye-slim
在 Dockerfile 中使用时)。
我想要的是:不断检查所有内容(包括本例中的“平台”,即 Debian 基础镜像)是否是最新的,而无需亲自构建所有内容(如果可能的话)。
我的主要问题是:似乎没有办法从拉取的docker镜像中检查基础镜像(参见https://stackoverflow.com/questions/35310212/docker-missing-layer-ids-in-output/35312577#35312577以及关于同一事物的其他 stackexchange 问题)。因此,我无法自动且通常地将正在运行的容器中的镜像层与上游基础镜像进行比较(甚至无法将应用程序镜像的最后更新日期与基础镜像的最后更新日期进行比较)。
有没有办法做到我上面描述的事情?或者我真的必须
a)完全信任 DockerHub 镜像的维护者,相信他们的构建流程是可靠的,或者
b) 自己构建一切(在这种情况下:为什么会存在 DockerHub 而不是 DockerFile 中心)?
编辑:如果这可能相关:这有点像这个老问题的延伸:如何处理 Docker 容器内的安全更新?
答案1
听起来您可以通过使用像 snyk 这样的外部服务来扫描您的图像,并使用完整图像版本而不是“最新”来实现这一点。
如果存在任何已知的安全漏洞,Snyk 会通知您。此外,snyk 可以扫描您的 docker 镜像和代码,以检查您是否有一个易受攻击的库(例如,来自 npm 安装)。
此外,如果您使用云提供商映像注册器(如 GCP 的 Cloud Register 或 AWS ECR),您还可以利用提供商的服务进行容器安全扫描。