我设法在/var/lib/docker/containers目录下找到了容器,但我找不到图像。

/var/lib/docker下的目录和文件是什么?


当前回答

使用docker info命令获取docker的主机设置,包括docker的存储路径。

获取docker存储的根路径:

docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g'

这给出了默认的Ubuntu 22.04和docker——version = docker version 20.10.17, build 100c701安装路径:

/var/lib/docker

使用命令列出该目录的内容和大小:

du -h -d 1 .

给出结果(其他目录):

444K    ./buildkit
4,0K    ./containers
4,0K    ./runtimes
16K     ./plugins
4,0K    ./trust
4,0K    ./tmp
100K    ./network
22M     ./image
2,0G    ./volumes
4,0K    ./swarm
9,0G    ./overlay2

为了让docker根路径以目录名的一个后缀,你可以在sed 's/$/\/image/g'的末尾添加另一个sed,以后缀/image

命令:

docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g' | sed 's/$/\/image/g'

给:

/var/lib/docker/image

命令:

docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g' | sed 's/$/\/overlay2/g'

给:

/var/lib/docker/overlay2

虽然目录的名称似乎不言自明,但图像的内容并不存储在图像目录(22M大小)中,而是存储在图像的信息中。/var/lib/docker/image/overlay2,尤其是/var/lib/docker/image/overlay2/repositories。Json文件,其中包含图像的名称和对应的关于overlay2层的数据。

图像(及其层)的实际数据存储在/var/lib/docker/overlay2(大小为9,0g)

请注意,存储图像重数据的overlay2是docker使用的分层系统,但该分层系统是docker可能使用的众多系统之一(现在或将来)。因此基于硬编码的路径可能是脆弱的。

特别是如果你的意图是将图像导出/保存到文件中,你应该寻找专用的命令:

Docker中保存和导出的区别是什么?

使用上述问题中的命令,您甚至可以将所有图像保存到一个文件中,压缩它,然后通过单个命令将它们导入到其他地方。

如果你想坚持docker路径,例如创建备份,我建议总是使用根路径,例如:

/var/lib/docker

由docker info命令生成,特别是你可能有重要的数据在里面:

/var/lib/docker/volumes

这是for所要求的。通过使用卷持久化数据的数据库映像。

其他回答

环境:Windows 10 Pro, docker desktop 2.0.3.0 edge

右键单击系统托盘中的docker图标,选择设置-高级:

磁盘映像位置(可通过浏览器编辑):

C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\DockerDesktop.vhdx

(它在那里-文档目录是隐藏的)

我只能对Ubuntu用户回答这个问题:

使用docker info命令可以找到docker的根目录

Docker目录将在这一行中给出:"Docker根目录:/var/lib/docker"

关于docker镜像,它们存储在docker目录中: /var/lib/docker/aufs/diff/

记住这些东西在docker的所有版本中都是不一样的。目前,我使用的是1.12.3。

在Fedora上,如果可用的话,Docker使用LVM作为存储。在我的系统上,docker信息显示:

Storage Driver: devicemapper
 Pool Name: vg01-docker--pool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file:
 Metadata file:
 Data Space Used: 9.622 GB
 ...

在这种情况下,要增加存储空间,就必须使用LVM命令行工具或兼容的分区管理器(如blivet)。

如果有人需要它来编写脚本,这里有一个简单的解决方案。

在POSIX shell中,启用了PCRE的grep,尝试:

DOCKER_ROOT_DIR="$(docker info 2>&1 | grep -oP '(?<=^Docker根目录:).*')"

PowerShell:

$DOCKER_ROOT_DIR="$(docker信息2>&1 | foreach {if($_ -match " docker根目录"){$_。TrimStart("Docker根目录:")}})"

注意,在Windows 10(截至10.0.18999.1)上,在默认配置下,它返回:

C:\ProgramData\Docker在“Windows容器”模式 /var/lib/docker,以“Linux容器”模式

sudo docker info | grep -e "Root Dir"