我正在尝试使用 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.vhdx
于blank-base.vhdx
- 分配驱动器号,
- 通过 volumeid64.exe 更改卷 ID,
- 分离。
是的,所有本质上使用相同 Windows 操作系统根层的容器都将具有相同的卷 ID。