docker - 如何在 Windows 机器上访问 docker 数据卷?

标签 docker docker-compose docker-volume docker-for-windows

我有这样的 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 我想从该挂载点访问数据,但我不知道该怎么做 window 机。也许我可以创建一些额外的容器来将数据从 docker 虚拟机传递到我的目录?

当我像这样安装文件夹时:

volumes:
  - ./data:/var/lib/mysql

使用我的本地目录 - 由于权限问题,我没有成功。并阅读“正确的方法”是使用 docker 卷。

UPD:MySQL 容器,它只是示例。我想在我的代码库中使用这种行为并使用 docker foe 本地开发。

最佳答案

对于 Windows 下的 Linux 容器,docker 实际上在 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

这正在运行一个辅助容器,该容器已将该 VM / 的洞根文件系统安装到容器目录 /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 - 如何在 Windows 机器上访问 docker 数据卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358328/

相关文章:

docker - 一定时间后 traefik 502 坏网关

python-3.x - 如何监视Docker卷使用情况?

linux - 跨主机和 Docker 容器环境管理目录权限

docker - Gitlab docker Runner路径问题。 gitlab-ci.yml

node.js - 在 docker 容器内调试 Angular

docker - 如何使用 docker-compose 设置主机名?

Dockerfile 入口点无法切换用户

docker - docker运行-v还是Dockerfile VOLUME优先?

docker - Docker 中的容器层和卷有什么区别?

macos - Docker:无法启动服务应用程序:OCI 运行时创建失败: