Docker:Docker导入的对面
使用Docker:Docker导入的对面,docker,Docker,使用docker import创建的图像无法运行,因为缺少必要的文件 我正在尝试调试映像中的内容和缺少的内容 我试过的 docker save创建一个tarball,但它不是一个包含文件的简单tarball,而是所有类型的元数据 docker导出需要运行的容器 我还有其他选择吗?如果映像有一个工作shell,请使用它进行调试 docker run -ti BROKEN_IMAGE sh 如果shell不起作用,导出图像内容,您将有一个tar文件,您可以在某处提取并检查 CID=$(dock
docker import
创建的图像无法运行,因为缺少必要的文件
我正在尝试调试映像中的内容和缺少的内容
我试过的
创建一个tarball,但它不是一个包含文件的简单tarball,而是所有类型的元数据docker save
需要运行的容器李>docker导出
我还有其他选择吗?如果映像有一个工作shell,请使用它进行调试
docker run -ti BROKEN_IMAGE sh
如果shell不起作用,导出图像内容,您将有一个tar文件,您可以在某处提取并检查
CID=$(docker create BROKEN_IMAGE)
docker export $CID | tar -tvf -
细节
docker导入的源文件/数据应为计划图像内容的tar文件。可以使用tar
命令在某处查看或提取此数据:
$ CID=$(docker create busybox)
$ docker export $CID > myimage.tar
$ tar -tvf myimage.tar
-rwxr-xr-x 0 0 0 0 28 Nov 01:03 .dockerenv
drwxr-xr-x 0 0 0 0 1 Nov 22:58 bin/
-rwxr-xr-x 0 0 0 1049688 1 Nov 22:58 bin/[
-rwxr-xr-x 0 0 0 0 1 Nov 22:58 bin/[[ link to bin/[
-rwxr-xr-x 0 0 0 0 1 Nov 22:58 bin/acpid link to bin/[
...
如果文件/数据来自docker save
,则会有额外的层来满足图像元数据和层的要求
$ docker save busybox | tar -tvf -
drwxr-xr-x 0 0 0 0 3 Nov 22:39 036a82c6d65f2fa43a13599661490be3fca1c3d6790814668d4e8c0213153b12/
-rw-r--r-- 0 0 0 3 3 Nov 22:39 036a82c6d65f2fa43a13599661490be3fca1c3d6790814668d4e8c0213153b12/VERSION
-rw-r--r-- 0 0 0 1174 3 Nov 22:39 036a82c6d65f2fa43a13599661490be3fca1c3d6790814668d4e8c0213153b12/json
-rw-r--r-- 0 0 0 1337856 3 Nov 22:39 036a82c6d65f2fa43a13599661490be3fca1c3d6790814668d4e8c0213153b12/layer.tar
-rw-r--r-- 0 0 0 1497 3 Nov 22:39 6ad733544a6317992a6fac4eb19fe1df577d4dec7529efec28a5bd0edad0fd30.json
-rw-r--r-- 0 0 0 203 1 Jan 1970 manifest.json
-rw-r--r-- 0 0 0 90 1 Jan 1970 repositories
LAYER\u ID/LAYER.tar
文件包含需要按照manifest.json
中Layers
数组的顺序提取的每个层内容
$ cat manifest.json | jq
[
{
"Config": "6ad733544a6317992a6fac4eb19fe1df577d4dec7529efec28a5bd0edad0fd30.json",
"RepoTags": [
"busybox:latest"
],
"Layers": [
"036a82c6d65f2fa43a13599661490be3fca1c3d6790814668d4e8c0213153b12/layer.tar"
]
}
]
Docker不需要一个正在运行的容器来运行Docker export
,它只需要一个容器:
docker create --name toexport brokenimage
docker export toexport -o exported.tar
docker rm toexport
docker save
与docker load
命令相辅相成,可用于以适当的格式保存图像,以便导入、保存每个图像层和图像元数据。这就是为什么产生的柏油球里面有更多的柏油球