当我找到这个样本撰写文件时,我正在为训练设置一些材料:
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接受像这样的空网络定义?
答案 0 :(得分:22)
这样的卷是Docker内部存储在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
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N]
docker-compose.yml 中的当您不需要执行除定义卷或网络应存在之外的任何操作时,存在接受卷和网络之类的“空”定义的倾向。也就是说,如果你想创建它,但是没有使用默认设置,那么没有特别的理由来指定参数。
答案 1 :(得分:0)
第一种方法
您必须查看您的音量列表:
docker volume ls
然后运行此命令:
sudo docker inspect <volume-name> | grep Mountpoint | awk '{ print $2 }'
第二种方法
您可以使用此方法:
首先运行docker ps以获取您的容器ID,然后运行此命令:
docker inspect --format="{{.Mounts}}" $containerID
我们将获得音量路径。