Docker:这个撰写文件的docker卷位于何处

Vin*_*fer 18 docker docker-compose

当我找到这个样本撰写文件时,我正在为训练设置一些材料:

https://github.com/dockersamples/example-voting-app/blob/master/docker-compose.yml

我无法在文件的第48和49行找到这个卷的装载方式:

volumes:
  db-data:
Run Code Online (Sandbox Code Playgroud)

有人可以解释我在主机上这个卷的位置吗?无法找到它,我不想在容器消失后保留任何postgresql数据.类似的事情发生在网络上:

networks:
  front-tier:
  back-tier:
Run Code Online (Sandbox Code Playgroud)

为什么docker compose接受像这样的空网络定义?

Dan*_*owe 38

找到卷

像这样的卷是Docker的内部存储并存储在Docker存储中(通常都在其下/var/lib/docker).您可以获得卷列表:

$ docker volume ls
DRIVER              VOLUME NAME
local               1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465
local               2f13b0cec834a0250845b9dcb2bce548f7c7f35ed9cdaa7d5990bf896e952d02
local               a3d54ec4582c3c7ad5a6172e1d4eed38cfb3e7d97df6d524a3edd544dc455917
local               e6c389d80768356cdefd6c04f6b384057e9fe2835d6e1d3792691b887d767724
Run Code Online (Sandbox Code Playgroud)

如果要执行以下操作,可以准确找到卷在系统中的存储位置:

$ docker inspect 1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465/_data",
        "Name": "1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465",
        "Options": {},
        "Scope": "local"
    }
]
Run Code Online (Sandbox Code Playgroud)

清理未使用的卷

只要确保事物不会悬空,就可以使用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]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml中的"空"定义

当您不需要执行除定义卷或网络应存在之外的任何其他操作时,存在接受卷和网络之类的这些"空"定义的趋势.也就是说,如果你想创建它,但是使用默认设置是可以的,那么没有特别的理由来指定参数.

  • 所以可以覆盖它并指定位置吗? (2认同)

has*_*.sd 7

第一种方法

您必须查看您的卷列表:

docker volume ls
Run Code Online (Sandbox Code Playgroud)

然后运行这个命令:

sudo docker inspect <volume-name> | grep Mountpoint | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

第二种方法

你可以使用这个方法:

首先运行 docker ps 来获取容器 ID,然后运行以下命令:

docker inspect --format="{{.Mounts}}" $containerID
Run Code Online (Sandbox Code Playgroud)

我们将得到卷路径。

  • 是的,您可以在 bash 脚本或自动状态下使用此命令,或者在 ansible 中使用 (3认同)