Node.js 导出的Docker图像tar在提取和重新创建后不相同

Node.js 导出的Docker图像tar在提取和重新创建后不相同,node.js,linux,docker,npm,tar,Node.js,Linux,Docker,Npm,Tar,对于应用程序,我需要能够从Docker导出图像,从它们的tar文件中提取图像,然后将这些图像重新创建为完全相同的tar文件,这些文件可以在不做任何更改的情况下导入 但是,当我提取一个图像tar,然后立即尝试创建一个新的、相同的tar(例如,两者的根相同),结果文件的大小略有不同 核查: 在两个文件上使用sha256sum会导致不同的散列 提取两个存档后,对结果文件夹的比较显示它们完全相同。通过diff和Meld进行验证 使用的步骤: 对于图像导出:docker图像保存{image\u nam

对于应用程序,我需要能够从Docker导出图像,从它们的tar文件中提取图像,然后将这些图像重新创建为完全相同的tar文件,这些文件可以在不做任何更改的情况下导入

但是,当我提取一个图像tar,然后立即尝试创建一个新的、相同的tar(例如,两者的根相同),结果文件的大小略有不同

核查:

  • 在两个文件上使用
    sha256sum
    会导致不同的散列

  • 提取两个存档后,对结果文件夹的比较显示它们完全相同。通过
    diff
    和Meld进行验证

使用的步骤:

对于图像导出:
docker图像保存{image\u name}>{tar\u name}&&mkdir>{extract\u folder}

对于归档操作,使用npm包
tar

tar.extract({
    file: {tar_file_path},
    cwd: {extract_folder},
    mtime: date, // a timestamp set before running any script
    preserveOwner: true,
})
/* */
tar.create({
    file: {new_tar_file_path},
    cwd: {extract_folder},
    mtime: date, // same as above
}, [''])

使用
dhex
也会显示出显著的十六进制级别差异,但在高级别上不清楚什么是差异

在创建新归档文件时,还需要哪些其他步骤来确保其与原始归档文件相同


在运行过程中的任何时候都没有应用压缩。

如果需要更改映像,标准做法是更新应用程序源代码和/或其
Dockerfile
并重新运行
docker build
。您试图使用此保存/修改/加载序列更改什么?为什么重新组装的映像必须是逐字节相同的?@DavidMaze这些映像不会被修改。我只需要知道每个图像的确切内容,并能够创建一个相同的、可导入的存档。申请是保密的,所以我不想进一步解释细节。