如何更改 Windows docker 镜像中的“卷序列号”?

如何更改 Windows docker 镜像中的“卷序列号”?

我正在尝试使用 Sysinternals 更改 docker 镜像的“卷序列号”卷IDError reading drive: The request is not supported.但是我跑步的时候却得到了Volumeid64.exe C: 1AAA-111A -nobanner -accepteula

我也尝试过 volumeid.exe。我对 Docker 还不熟悉,所以感觉我可能会犯一个初学者的错误,或者这是 Docker 和/或 的限制Volumeid

完整样子Dockerfile如下

FROM microsoft/windowsservercore

WORKDIR C:/sysinternals
RUN powershell -Command \
  Invoke-WebRequest -outfile VolumeId.zip "https://download.sysinternals.com/files/VolumeId.zip" -UseBasicParsing; ` \
  Expand-Archive VolumeId.zip -DestinationPath c:\sysinternals ; ` Remove-Item VolumeId.zip ; ` \
  Invoke-Expression 'c:\sysinternals\Volumeid64.exe C: 1AAA-111A -nobanner -accepteula'

CMD vol c:

答案1

这是旧的,但我遇到了完全相同的问题
,并发现德米特里·伊万诺夫的答案非常有帮助,但并不完整。

您需要找到图像的基础层虚拟驱动器,blank.vhdx
它存储在其中C:\ProgramData\Docker\windowsfilter,其中每个层都有一个文件夹。

我通过删除除一张之外的所有图像找到了它,然后只有一个文件夹包含此文件。

对于图像,文件夹中以日期开头 和结尾的mcr.microsoft.com/windows/servercore:ltsc2022
图层 按日期排序可以帮助您找到所需的图层。(应该是基础层)c42094
b263c6

现在我关注了这里的博客文章:
https://osdfir.blogspot.com/2021/07/windows-container-forensics.html

在“块设备层”标题下,解释了如何安装 vhdx,但我们需要安装blank.vhdx而不是blank-base.vhdx

Mount-DiskImage -ImagePath C:\ProgramData\docker\windowsfilter\c42094[...]b263c6\blank.vhdx

然后我们需要为其分配一个驱动器号
我个人使用磁盘管理来执行此操作

有驱动器号后,volumeid可用于更改其卷序列号。您需要删除驱动器号并重新添加才能看到更改

删除驱动器号后,blank-base.vhdx使用Dismount-DiskImage
然后你就可以运行你的docker了,卷序列号就是你设置的值!
对于这一层上中继的所有图像,它都是相同的。

希望这可以帮助!

答案2

blank-base.vhdx这很可能是 Windows docker 实现的一个限制。Windows OS 映像的根层中有(参见C:\ProgramData\Docker\windowsfilter)。Docker 每次拉取根层时都会生成此文件。我设法通过以下序列更改了里面的卷 ID:

  • 依赖blank.vhdxblank-base.vhdx
  • 分配驱动器号,
  • 通过 volumeid64.exe 更改卷 ID,
  • 分离。

是的,所有本质上使用相同 Windows 操作系统根层的容器都将具有相同的卷 ID。

相关内容