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

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

评论

在这种情况下,最好在问题标题和/或问题说明中说明操作系统的详细信息。针对linux和macOS(Mac OS X)提供了两个很好的答案。

#1 楼

/var/lib/docker目录的内容因Docker使用的存储驱动程序而异。

默认情况下,它将为aufs,但根据您的内核支持,它可能会退回到overlayoverlay2btrfsdevicemapperzfs。在大多数地方,这将是aufs,但是RedHats是devicemapper

您可以使用Docker守护程序的-s--storage-driver=选项手动设置存储驱动程序。



/var/lib/docker/{driver-name}将包含驱动程序特定的图像内容存储。

/var/lib/docker/graph/<id>现在仅在jsonlayersize文件中包含有关图像的元数据。

对于aufs



/var/lib/docker/aufs/diff/<id>具有图像的文件内容。

/var/lib/docker/repositories-aufs是包含本地图像信息的JSON文件。可以使用命令docker images查看。

对于devicemapper




/var/lib/docker/devicemapper/devicemapper/data存储图像

/var/lib/docker/devicemapper/devicemapper/metadata元数据
请注意,这些文件是精简配置的“稀疏”文件,因此不像它们看起来的大。


评论


通过某种方式安装,我可以看到里面的内容吗?

–r.v
2015年11月18日在14:46

如果在存储驱动程序已经运行并且具有一些正在运行的带有映像的容器之后对其进行设置,它将在下次重新启动守护程序时迁移日期吗?如果不是,那么在这种情况下如何修改存储驱动程序?

– BTR Naidu
16年4月12日在13:54

对于MacOS,请参见下面的答案

– ProNandaa
16-09-27在18:14

帮自己一个忙,不要“检查默认值”。使用docker info并找到特定于您的设置的实际位置。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
17年5月4日15:57

这似乎已经改变。我正在使用Docker for Mac,每个图像有2张1.5 GB的图像,并且/ var / lib没有目录docker。

–miguelmorin
19年1月14日在10:23



#2 楼

当使用Docker for Mac应用程序时,容器似乎存储在位于以下位置的VM中:

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2


UPDATE(由mmorin提供): />截至2019年1月15日,似乎只有一个文件:

评论


这是所有图像(例如ubuntu,nginx)的位置,还是所有容器的位置?最初的问题要求提供图像,而不是容器...

–小清庞-明日香贤治-
17年8月5日在4:49

如果您记住Docker仍在VM中运行,则系统路径是相对于VM的,而不是来自Mac Osx系统的路径。尝试以下命令:docker run --rm -it -v /:/ vm-root alpine:edge ls -l / vm-root nad之后:docker run --rm -it -v /:/ vm-root alpine: edge ls -l / vm-root / var / lib / docker您可以从WM主机列出docker文件夹

–user1842947
18-3-22在20:01



这似乎已经改变。我正在使用Docker for Mac,每个都有1.5 GB的两个映像,并且〜/ Library / Containers / Data / com.docker.docker / Data没有目录com.docker.driver.amd64-linux并且唯一的大文件在vms / 0 / Docker.raw(3.6 GB)。

–miguelmorin
19年1月14日在10:27

是否使用qcow2还是raw是否使用取决于您是使用APFS还是以下版本的MacOS High Sierra:docs.docker.com/docker-for-mac/faqs/#disk-usage

–彼得
19年3月23日在15:52

检查mac的大小:du -hd1〜/ Library / Containers / com.docker.docker / Data /

– Efren
19年8月30日,下午3:32

#3 楼

这是过去的做法,现在已经改变了。从2019年起忽略此答案

在Mac OS X或Windows的特殊情况下,使用boot2docker,您的Docker映像存储在由boot2docker管理的VirtualBox VM中。 VM将存储在VirtualBox映像的正常位置:

OS X:~/VirtualBox VMs/boot2docker-vm

Windows:%USERPROFILE%/VirtualBox VMs/boot2docker-vm
:这将破坏您到目前为止已构建并下载的所有图像):没有有用的--rm选项,请在此处引用以供参考:
使用:

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up


而不是:

评论


在Windows 10上全新安装Docker之后,我可以确认首次单击Docker Quickstart Terminal快捷方式的结果会创建一个名为“默认”的虚拟机(VM)(在几次失败的启动之后-继续运行直到有用)。该“默认” VM可以位于Windows中的以下位置:%USERPROFILE%\。docker \ machine \ machines(请注意路径中的句号)

–otherLongUsername
16年1月20日在16:43



在新版本中,boot2docker现在是docker-machine。参见docs.docker.com/machine/migrate-to-machine

– khylo
16-4-12在20:29



是否可以更改该位置?

– dhblah
16年4月14日在10:11

对于Windows 10,答案不再正确。相反,请参阅来自@tristan的较新答案,该答案引用C:\ Users \ Public \ Documents \ Hyper-V \ Virtual硬盘\ MobyLinuxVM.vhdx

–aaronsteers
16-10-29在21:24



%USERPROFILE%\。docker对于win7设置仍然正确。

–RMorrisey
17 Mar 15 '14:28

#4 楼

实际上,Docker映像存储在两个文件中,如以下命令所示:

$ docker info



数据文件:/var/lib/docker/devicemapper/devicemapper/data

元数据文件: /var/lib/docker/devicemapper/devicemapper/metadata


评论


这是针对RedHat变体的。他们选择不使用AUFS,因为它不在主线内核中。

–马特
2015年2月15日在22:09

是的,不幸的是,这两行“(Meta)数据文件”并未出现在每个泊坞窗中。这取决于使用的驱动程序

–Orabîg
15年7月11日在7:25

@DmitryYudin mirosval的答案适用于Mac的最新Docker。

–于富兰
16年9月9日在18:16

正确的答案不是“这就是我的机器上的位置”。正确的答案是“这是您在计算机上找到它的方式”。这是一个正确的答案。我加入了一家拥有11种不同EBS卷的完整公司,其中包含docker镜像。这个答案让我弄清楚了哪个是当前的“根目录”。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
17年5月4日在15:54



在Mac OS X上(至少在Yosemite上,这是对Docker无效),docker信息非常有用,但是输出Docker Root Dir:/ var / lib / docker不指示映像存储位置(请参阅上面的Mac专用答案) )。

– Webel IT澳大利亚-赞助商
18年2月21日在12:21

#5 楼

在使用Hyper-V的新发布的“ Docker for Windows”上,数据位于Docker虚拟硬盘中:
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx


您还可以打开“ Hyper-V Manager”用于访问Docker / MobyLinuxVM。

评论


Windows 10周年更新上的Docker对我来说将图像文件放在C:\ ProgramData \ docker \ windowsfilter中。更多信息:stackoverflow.com/a/39971954/188740

–Johnny Oshika
16-10-11在7:04

答案是“ Hyper-V经理”!

– Reza
18-10-21在19:02

我没有Hyper V,正在使用Docker Toolbox ..知道虚拟磁盘的位置

– S A
6月23日8:39

#6 楼

图像存储在/var/lib/docker/graph/<id>/layer中。

请注意,图像只是与父图像的差异。父ID与图像的元数据/var/lib/docker/graph/<id>/json一起存储。

当您对图像进行docker run时。 AUFS将所有层“合并”到一个可用的文件系统中。

评论


现在,这个答案已经过时,他们已经解决了一些问题。

–Air
2014年9月22日下午16:25

@Air您可以张贴发生了什么事吗?

–伊利亚·林恩(Elijah Lynn)
16-3-18的2:15

不再有图形文件夹

–稻田
19年4月11日在13:39



#7 楼

在Ubuntu上,您可以“播放”正在运行的图像

sudo baobab /var/lib/docker


/var/lib/docker/aufs/diff中



评论


确实不错。在Mac上,DaisyDisk类似(滚轮显​​示),GrandPerspective也有用(矩形)。

– Webel IT澳大利亚-赞助商
18年2月21日在12:44

看来,这是找到它的唯一可靠方法。

–亚历山大
19/12/2在9:46

#8 楼

对于使用Docker工具箱(使用docker-machine)的用户,有关Mac OS X上boot2docker的答案无效。 docker-machine VM被称为“默认”,它存在于/Users/<username>/.docker/machine/machines/default/目录中。

评论


我在该目录中找不到任何容器或图像文件夹。

–lvarayut
16年1月7日在10:16

在该目录中查找disk.vmdk

–lukeaus
16年1月14日在8:22

$ docker images -a产生大约1 gig的图像,而〜/ .docker中的disk.vmdk大约20 gigs。怎么来的?

– Grav
16-4-29在11:28



它存储在Windows中的何处?

– Shreyas
16年5月2日,12:37

@Grav:虚拟机分配20个演出以供将来使用,但仅将1个演出用于映像。

–primavera133
16年6月10日在7:27

#9 楼

在Windows的Docker(本地Windows)中,默认容器存储位于:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...


评论


我运行了docker build命令,但没有看到我认为是图像文件的文件。我看到一些文件夹和一些文本文件(例如service.txt)。 docker构建会创建什么类型的文件以及带有什么文件扩展名?

–user3731622
19年4月12日在0:08

#10 楼

如果您使用的是Docker for MAC(不是boot2docker),则位置为/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

评论


是的,当我这样做时:jasper@~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux $ ls -lh | grep Docker -rw-r--r-@ 1碧玉员工6.3G 5月25日19:20 Docker.qcow2我找到了镜像。但这不是容器。确实没有在此Data目录中看到它们。

–rhand
17年5月25日在16:22



但是,正如您在此处所说的stackoverflow.com/a/37642236/460885所示,容器位于此图像中。

–rhand
17年5月25日在16:51

#11 楼

sudo docker info | grep -e "Root Dir"


评论


谢谢先生,非常好。

–迈克·奥塔玛(Mikko Ohtamaa)
7月20日23:20

#12 楼

如此处的回答,如果您使用的是Mac,则它位于

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2


评论


Docker.qcow2吗?我该如何从中拉取特定的Docker映像?

– AlxVallejo
18年7月9日在15:02

#13 楼

扩大Tristan的答案,在带有Hyper-V的Windows中,您可以按照以下步骤从matthuisman中移动图像:


在Windows 10中,



停止docker etc
在任务栏搜索框中键入“ Hyper-V Manager”并运行它。
在左侧窗格中选择您的PC(矿井称为
DESKTOP-CBP **)
右键单击正确的虚拟机(我的是
,称为MobyLinuxVM)
选择“关闭”(如果正在运行)
再次右键单击它,然后选择“移动”
按照提示进行操作



评论


这只会移动Hyper-V计算机而不移动图像,图像仍将存储在VHD位置。

– olive_tree
17年2月8日在0:38

@olive_tree我正在尝试查找由docker build命令创建的图像。我在Windows 10电脑上。我查看C:\ Users \ Public \ Documents \ Hyper-V \ Virtual硬盘,但我看到的只是MobyLinuxVM.vhdx。实际图像存储在哪里?

–user3731622
19年4月12日在0:13

#14 楼

使用docker info命令显示系统范围的信息,并且位置可能有所不同。

取决于所使用的存储驱动程序,可以显示其他信息,例如池名称,数据文件,元数据文件,数据空间已使用,总数据空间,已使用的元数据空间和总元数据空间。
数据文件是存储图像的位置,元数据文件是与这些图像有关的元数据的存储位置。 Docker首次运行时,将从安装/var/lib/docker的卷上的可用空间分配一定数量的数据空间和元数据空间。这是Ubuntu上的示例(请检查Root Dir):
$ docker info
...
Server Version: 18.06.1-ce
Storage Driver: aufs
 Root Dir: /var/snap/docker/common/var-lib-docker/aufs
...
Docker Root Dir: /var/snap/docker/common/var-lib-docker
...

这是Travis CI上的示例(请参阅Docker Root Dir):
$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...

您可以使用--format参数将该信息提取到单个文件中,例如/>
$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]

或:
$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]


#15 楼

对于“ Docker Desktop”,单击docker系统任务栏图标,然后单击“设置”。


在“高级”选项卡上,您可以看到磁盘映像位置。 />

#16 楼

如果您记住Docker仍在VM中运行,则系统路径是相对于VM的,而不是来自Mac Osx系统的路径。
如前所述,所有内容都包含在VM文件中:


/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver。 amd64-linux / Docker.qcow2


尝试使用此卷选项和ls命令运行Alpine映像,以便能够列出VM主机:

< br docker run --rm -it -v /:/ vm-root alpine:edge ls -l / vm-root


之后,请尝试:


docker run --rm -it -v /:/ vm-root alpine:edge ls -l <​​br /> / vm-root / var / lib / docker


现在,您可以从VM主机中列出docker文件夹了。

评论


谢谢!这是在带有Hyper-v的Windows 10上对我有用的唯一答案。我能够清理难以捉摸的/ var / lib / docker / overlay2文件夹下的损坏文件。

–阿里·谢伊托(Ali Cheaito)
2月13日21:51

#17 楼

我将boot2docker用于Mac OSX上的Docker,因此图像存储在/Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk中。

#18 楼

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

运行命令docker info

Docker目录将在以下行中找到docker的根目录: Docker Root Dir: /var/lib/docker

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

请记住,在所有版本的docker中这些都不相同。目前,我正在使用1.12.3。

#19 楼

使用docker inspect container_id
查找MergedDir下的文件夹

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 


#20 楼

在适用于Windows的Docker中,日志位于:%USERPROFILE%\AppData\Local\Docker

#21 楼

检查/var/lib中的docker文件夹

图像存储在以下位置:

/var/lib/docker/image/overlay2/imagedb/content


评论


这个只有sha256文件夹

– toto'
19年2月21日在19:10

我认为您的意思只是:/ var / lib / docker / image / overlay2 /。还要注意,这是由于您的Docker引擎正在使用overlay2作为存储驱动程序。

–Guy Avraham
4月28日上午11:31

#22 楼

环境:Windows 10 Pro,docker桌面2.0.3.0 edge

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

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

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

(那里-Documents目录被隐藏)

评论


C:\ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx是docker build命令创建的映像吗?

–user3731622
19年4月12日在19:42

#23 楼

在Fedora上,Docker使用LVM进行存储(如果有)。在我的系统上,docker info显示: >

#24 楼

在Windows 2016中,docker(DockerMsftProvider)使用docker根目录下的“ windowsfilter”文件夹。

将下载的文件解压缩到“ windowsfilter”文件夹后,删除文件。

#25 楼

在Debian Unstable / Sid上,

docker info查找系统范围的信息。

图像存储在/var/lib/docker/image/overlay2/imagedb/content

容器存储在/var/lib/docker/containers

docker版本18.06.0-ce,API版本1.38

#26 楼

我无法使用上述答案在macOS上使用Docker版本18.09解决问题,然后再次尝试。

对我来说,唯一实际的解决方案是使用以下docker-compose.yml配置:

version: '3.7'
...
  services:
    demo-service:
      volumes:
        - data-volume:/var/tmp/container-volume

volumes:
  data-volume:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /tmp/host-volume


使用docker-compose up启动后,我终于从容器中共享了来自macOS的/tmp/host-volume作为可写卷:

#27 楼

图像存储在/var/lib/docker内,然后在适用的storage driver目录下。

正在使用的存储驱动程序可以通过执行docker info命令来确定。

#28 楼

根据Docker入门指南,“您创建的映像”是“在您计算机的本地Docker映像注册表中。”导致这个问题。我的机器的本地Docker映像注册表在哪里?

但是,我绝对认为此信息值得分享作为答案。

评论


哈哈TBH我认为这最多是一条评论。将会是一个很棒的评论!

–孟H
19年7月27日在19:25

#29 楼

如果有人出于脚本目的需要它,这是一种单行解决方案。

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

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

在PowerShell中:

$DOCKER_ROOT_DIR="$(docker info 2>&1 | foreach {if($_ -match "Docker Root Dir"){$_.TrimStart("Docker Root Dir: ")}})"

注意,在Windows 10(自10.0.18999.1起)上,在默认配置下,它返回: br />
在Windows容器模式下的C:\ProgramData\Docker

在Linux容器模式下的/var/lib/docker


评论


在CentOS上,我不得不使用DOCKER_ROOT_DIR =“ $(sudo docker info 2>&1 | grep -oP'(?<= Data loop file:)。*')”,但最后它是一个文件,而不是目录

–HairOfTheDog
19-10-22在2:38



您确定它不是目录吗?对我来说,sudo ls“ $(docker info 2>&1 | grep -oP'(?<= ^ Docker Root Dir:)。*')”列出了该目录的内容。

–火神乌鸦
19-10-26在10:21