当我涉及此示例撰写文件时,我正在设置一些培训材料:
https://github.com/dockersamples/example-voting-app/blob/master/docker- compose.yml
而且我找不到文件的第48和49行上如何安装该卷:
volumes: db-data:
有人可以向我解释主机上的该卷在哪里吗?找不到它,我不希望在容器消失后保持任何postgresql数据悬挂。网络发生了类似的事情:
networks: front-tier: back-tier:
为什么docker compose会接受这样的空网络定义?
此类卷在Docker内部,并存储在Docker存储区(通常位于/var/lib/docker)下。您可以获取卷列表:
/var/lib/docker
$ docker volume ls DRIVER VOLUME NAME local 1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465 local 2f13b0cec834a0250845b9dcb2bce548f7c7f35ed9cdaa7d5990bf896e952d02 local a3d54ec4582c3c7ad5a6172e1d4eed38cfb3e7d97df6d524a3edd544dc455917 local e6c389d80768356cdefd6c04f6b384057e9fe2835d6e1d3792691b887d767724
如果您要执行以下操作,则可以准确找到卷在系统上的存储位置:
$ docker inspect 1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465 [ { "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465/_data", "Name": "1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465", "Options": {}, "Scope": "local" } ]
只要确保不使事物悬空,在这种情况下,您可以使用prune命令docker volume prune。这将为您提供此输出,您可以选择是否继续修剪。
docker volume prune
$ docker volume prune WARNING! This will remove all volumes not used by at least one container. Are you sure you want to continue? [y/N]
当您除了定义卷或网络应该存在之外不需要执行任何其他操作时,就有一种倾向接受诸如卷和网络之类的这些“空”定义。也就是说,如果要创建它,但可以使用默认设置,则没有特别的理由指定参数。