我们有一个ASP.NET核心Docker映像,它是通过Dockerfile中的默认FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
构建的。
我们有一个每周构建版本。我们的漏洞扫描会在低级别Debian库的每个构建版本中引发不同的问题。例如Week 1:一个关于libraryA v1
的问题。它建议我们将libraryA
更新为v2
。但是接下来的一周,当我们构建一个新的Docker映像时,ASPNET自动附带了libraryA
的v2
。我们甚至不必对libraryA
做任何事情。但是随后,报告了新的漏洞,这些漏洞将在接下来的几周内自动修复。
有没有办法告诉ASP使用特定的操作系统版本?
从ASPNET停靠中心,
https://hub.docker.com/_/microsoft-dotnet-aspnet/
以下是Debian 11的标签:
6.0.13-bullseye-slim-amd64, 6.0-bullseye-slim-amd64, 6.0.13-bullseye-slim, 6.0-bullseye-slim, 6.0.13, 6.0
我们去年11月的版本是使用6.0.11
,通过检查镜像的docker历史记录。它报告了一些关于krb 5/libgssapi-krb 5 -2的问题,建议它升级到版本1.18.3-6+deb 11 u3。我们去年11月的docker镜像只有在我使用docker-exec
时才使用deb 11 u2。
今天(1月),如果我尝试使用下面的FROM
强制使用特定的ASPNET版本,则库会自动更新为deb 11 u3。
• FROM mcr.microsoft.com/dotnet/aspnet:6.0.11 AS base
• FROM mcr.microsoft.com/dotnet/aspnet:6.0.11-bullseye-slim-amd64 AS base
我正在考虑设定一个特定的ASPNET或Debian版本的基准,我将通过使用这些库的apt-get
手动解决漏洞报告。但从我上面的测试来看,即使我在Dockerfile的FROM
中指定了一个特定的版本,微软似乎也会自动更新底层操作系统。
有什么线索告诉ASPNET使用特定的操作系统版本吗?(抱歉Docker新手在这里)
1条答案
按热度按时间kmbjn2e31#
aspnet Dockerfiles并不基于其依赖项的固定版本,因此即使您使用
6.0.13-bullseye-slim-amd64
固定了所需的aspnet版本,如果Microsoft重新构建并重新发布它,一些底层库可能已经更新。要完全锁定所需的图像版本,可以在FROM语句中使用摘要而不是标记,这样就不会得到任何更新,并且始终指向所需图像的确切版本。
你这样用
您可以通过运行
docker inspect image <image>
找到摘要。摘要位于“RepoDigests”字段中。当您运行docker pull
时,摘要也会打印出来。然后,您应该在Dockerfile中添加一个注解,说明摘要引用的标记,因为这不再是显而易见的。
让我补充一下,这可能不是一个好主意。你拒绝了自己的安全更新,可以修复重要的漏洞。这可能是值得看看如何才能有一个平稳的工作流程,并同时获得这些更新。