如何在 Windows 机器上访问 docker 数据卷?
How I can access docker data volumes on Windows machine?
我有 docker-compose.yml
这样的:
version: '3'
services:
mysql:
image: mysql
volumes:
- data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD
volumes:
data:
我的挂载点如下所示:/var/lib/docker/volumes/some_app/_data
我想从该挂载点访问数据,但我不确定如何在 Windows 机器上执行此操作。也许我可以创建一些额外的容器,可以将数据从 docker 虚拟机传递到我的目录?
当我像这样安装文件夹时:
volumes:
- ./data:/var/lib/mysql
使用我的本地目录 - 由于权限问题,我没有成功。并阅读 "right way" 正在使用 docker 卷。
更新:MySQL 容器这只是示例。我想在我的代码库中使用这种行为,并使用 docker 本地开发。
对于 Windows 下的 Linux 容器,docker 运行s 实际上 在 Linux 虚拟机上,因此您的 named
卷是该 VM 中的本地目录到容器中目录的映射。
所以您得到的 /var/lib/docker/volumes/some_app/_data
是该 VM 中的一个目录。要检查它,您可以:
docker run --rm -it -v /:/vm-root alpine:edge ls -l /vm-root/var/lib/docker/volumes/some_app/_data
total 188476
-rw-r----- 1 999 ping 56 Jun 4 04:49 auto.cnf
-rw------- 1 999 ping 1675 Jun 4 04:49 ca-key.pem
-rw-r--r-- 1 999 ping 1074 Jun 4 04:49 ca.pem
-rw-r--r-- 1 999 ping 1078 Jun 4 04:49 client-cert.pem
-rw------- 1 999 ping 1679 Jun 4 04:49 client-key.pem
-rw-r----- 1 999 ping 1321 Jun 4 04:50 ib_buffer_pool
-rw-r----- 1 999 ping 50331648 Jun 4 04:50 ib_logfile0
-rw-r----- 1 999 ping 50331648 Jun 4 04:49 ib_logfile1
-rw-r----- 1 999 ping 79691776 Jun 4 04:50 ibdata1
-rw-r----- 1 999 ping 12582912 Jun 4 04:50 ibtmp1
drwxr-x--- 2 999 ping 4096 Jun 4 04:49 mysql
drwxr-x--- 2 999 ping 4096 Jun 4 04:49 performance_schema
-rw------- 1 999 ping 1679 Jun 4 04:49 private_key.pem
-rw-r--r-- 1 999 ping 451 Jun 4 04:49 public_key.pem
-rw-r--r-- 1 999 ping 1078 Jun 4 04:49 server-cert.pem
-rw------- 1 999 ping 1675 Jun 4 04:49 server-key.pem
drwxr-x--- 2 999 ping 12288 Jun 4 04:49 sys
那是 运行ning 一个辅助容器,该容器已将该 VM /
的 hole root 文件系统安装到容器目录 /vm-root
。
要在后台使用某些命令获取一些文件 运行 容器(tail -f /dev/null
在我的例子中),然后你可以使用 docker cp
:
docker run --name volume-holder -d -it -v /:/vm-root alpine:edge tail -f /dev/null
docker cp volume-holder:/vm-root/var/lib/docker/volumes/volumes_data/_data/public_key.pem .
如果您想要通过 SSH 连接到该虚拟机,截至 2017 年 6 月,似乎尚不支持。 Here 一位 docker 工作人员这样说。
我有 docker-compose.yml
这样的:
version: '3'
services:
mysql:
image: mysql
volumes:
- data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD
volumes:
data:
我的挂载点如下所示:/var/lib/docker/volumes/some_app/_data
我想从该挂载点访问数据,但我不确定如何在 Windows 机器上执行此操作。也许我可以创建一些额外的容器,可以将数据从 docker 虚拟机传递到我的目录?
当我像这样安装文件夹时:
volumes:
- ./data:/var/lib/mysql
使用我的本地目录 - 由于权限问题,我没有成功。并阅读 "right way" 正在使用 docker 卷。
更新:MySQL 容器这只是示例。我想在我的代码库中使用这种行为,并使用 docker 本地开发。
对于 Windows 下的 Linux 容器,docker 运行s 实际上 在 Linux 虚拟机上,因此您的 named
卷是该 VM 中的本地目录到容器中目录的映射。
所以您得到的 /var/lib/docker/volumes/some_app/_data
是该 VM 中的一个目录。要检查它,您可以:
docker run --rm -it -v /:/vm-root alpine:edge ls -l /vm-root/var/lib/docker/volumes/some_app/_data
total 188476
-rw-r----- 1 999 ping 56 Jun 4 04:49 auto.cnf
-rw------- 1 999 ping 1675 Jun 4 04:49 ca-key.pem
-rw-r--r-- 1 999 ping 1074 Jun 4 04:49 ca.pem
-rw-r--r-- 1 999 ping 1078 Jun 4 04:49 client-cert.pem
-rw------- 1 999 ping 1679 Jun 4 04:49 client-key.pem
-rw-r----- 1 999 ping 1321 Jun 4 04:50 ib_buffer_pool
-rw-r----- 1 999 ping 50331648 Jun 4 04:50 ib_logfile0
-rw-r----- 1 999 ping 50331648 Jun 4 04:49 ib_logfile1
-rw-r----- 1 999 ping 79691776 Jun 4 04:50 ibdata1
-rw-r----- 1 999 ping 12582912 Jun 4 04:50 ibtmp1
drwxr-x--- 2 999 ping 4096 Jun 4 04:49 mysql
drwxr-x--- 2 999 ping 4096 Jun 4 04:49 performance_schema
-rw------- 1 999 ping 1679 Jun 4 04:49 private_key.pem
-rw-r--r-- 1 999 ping 451 Jun 4 04:49 public_key.pem
-rw-r--r-- 1 999 ping 1078 Jun 4 04:49 server-cert.pem
-rw------- 1 999 ping 1675 Jun 4 04:49 server-key.pem
drwxr-x--- 2 999 ping 12288 Jun 4 04:49 sys
那是 运行ning 一个辅助容器,该容器已将该 VM /
的 hole root 文件系统安装到容器目录 /vm-root
。
要在后台使用某些命令获取一些文件 运行 容器(tail -f /dev/null
在我的例子中),然后你可以使用 docker cp
:
docker run --name volume-holder -d -it -v /:/vm-root alpine:edge tail -f /dev/null
docker cp volume-holder:/vm-root/var/lib/docker/volumes/volumes_data/_data/public_key.pem .
如果您想要通过 SSH 连接到该虚拟机,截至 2017 年 6 月,似乎尚不支持。 Here 一位 docker 工作人员这样说。