Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:Docker导入的对面_Docker - Fatal编程技术网

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
创建的图像无法运行,因为缺少必要的文件

我正在尝试调试映像中的内容和缺少的内容

我试过的

  • docker save
    创建一个tarball,但它不是一个包含文件的简单tarball,而是所有类型的元数据
  • 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
命令相辅相成,可用于以适当的格式保存图像,以便导入、保存每个图像层和图像元数据。这就是为什么产生的柏油球里面有更多的柏油球