📜  在 Docker Desktop (Windows) 中定位数据卷 (1)

📅  最后修改于: 2023-12-03 15:23:08.502000             🧑  作者: Mango

在 Docker Desktop (Windows) 中定位数据卷

在使用 Docker 时,数据卷是一个非常重要的概念。该功能允许你将 Docker 容器中的数据持久化到主机上,使其不受容器生命周期的影响。本文将介绍如何在 Docker Desktop (Windows) 环境中定位数据卷。

获取容器 ID

首先,需要获取要检查数据卷的容器 ID。可以通过 docker ps 命令获取正在运行中的容器列表,找到对应的 ID。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
f5ed5d5b7a35   nginx     "..."     5 minutes ago    Up 5 minutes    80/tcp    my-nginx

容器的 ID 是 f5ed5d5b7a35

查看数据卷

接下来,可以使用 docker inspect 命令查看该容器的详细信息,并找到数据卷的路径。

$ docker inspect f5ed5d5b7a35
...
"Mounts": [
    {
        "Type": "bind",
        "Source": "/path/to/volume",
        "Destination": "/usr/share/nginx/html",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
]
...

可以看到,该容器有一个绑定类型的数据卷,源路径是 /path/to/volume,目标路径是 /usr/share/nginx/html

定位数据卷

现在,可以在主机上根据源路径定位数据卷。由于 Windows 上的 Docker Desktop 是运行在虚拟机(Hyper-V)中的,因此需要先进入虚拟机环境。

$ docker run --rm -it --privileged --pid=host justincormack/nsenter1
/ # ps aux | grep docker
root         1  0.0  0.5 266144 19808 ?        Ssl  02:12   0:01 /usr/local/bin/dockerd --configuration /var/run/docker/daemon.json --tls=false --experimental=true
/root        15  0.0  0.1  11532  3640 ?        Ss   02:12   0:00 /usr/bin/entrypoint /usr/bin/start.sh
...

/ # nsenter -t 1 -m -u -n -i sh

获取到虚拟机环境后,可以使用 nsenter 命令进入 Docker 主机命名空间。在 Docker 主机上,可以通过源路径找到数据卷的目标路径。

# mount | grep path/to/volume
192.168.65.2:/Users/xxx/path/to/volume on /var/lib/docker/volumes/.../_data type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.65.2,mountvers=3,mountport=43621,mountproto=udp,local_lock=all,addr=0.0.0.0)

可以看到,该数据卷实际上被挂载到了 /var/lib/docker/volumes/.../_data 目录下。

结论

通过上述步骤,可以在 Docker Desktop (Windows) 环境中定位任何容器的数据卷所在位置。这对于程序员们使用 Docker 进行应用程序开发和管理非常有帮助。