繁体   English   中英

使用 Docker 桌面的 WSL2 上的 Docker 卷

[英]Docker volumes on WSL2 using Docker Desktop

我只是在 Docker for Windows 上试用 WSL 2,但我在安装卷时遇到了问题:

version: "3.7"

services:
    node:
        build: .
        container_name: node
        hostname: node
        volumes: 
            - ./app:/app
        stdin_open: true

容器构建并启动良好,我使用 docker exec 很好地访问它,但容器内的/app文件夹未绑定到我的笔记本电脑app文件夹。 但是,正确的路径实际上已正确安装在正在运行的容器上:

(这里我在主机上执行密码,如果它与容器上安装的内容完美匹配)

➜  app pwd   
/mnt/c/Users/willi/devspace/these/app

这是 portainer 的屏幕,它告诉我在容器中安装了哪些路径并且一切都匹配。

来自 portainer 的 docker 卷

我在主机上的 app 文件夹中创建的文件在容器的 app 文件夹中不可见,反之亦然。 这很奇怪,我不知道如何调试它。

补充资料:

  • Windows 10 专业版 10.0.19041
  • Docker for Windows 版本:2.3.0.4
  • WSL 中的 docker docker version输出:19.03.12
  • docker docker-compose version :1.26.2

谢谢

正如@Pablo 所提到的,最佳实践似乎是使用 WSL 文件系统来映射卷。

查看 有关 WSL2Docker 文档

最佳实践

  1. 要在绑定挂载文件时充分利用文件系统性能:
    • 将绑定安装到 Linux 容器(即,使用docker run -v <host-path>:<container-path> )的源代码和其他数据存储在 Linux 文件系统中,而不是 Windows 文件系统中。
    • 如果原始文件存储在 Linux 文件系统中,Linux 容器只会接收文件更改事件(“inotify 事件”)。
    • 当文件从 Linux 文件系统绑定挂载而不是从 Windows 主机远程安装时,性能要高得多。 因此避免docker run -v /mnt/c/users:/users (其中/mnt/c从 Windows 挂载)。
    • 相反,从 Linux shell 使用类似docker run -v ~/my-project:/sources <my-image> ,其中~由 Linux shell 扩展为$HOME
  2. 如果您担心 docker-desktop-data VHDX 的大小,或需要更改它,请查看 Windows 内置的 WSL 工具。
  3. 如果您担心 CPU 或内存使用情况,您可以配置对分配给 WSL 2 实用程序 VM 的内存、CPU、交换大小的限制。
  4. 为了避免在 Docker Desktop 上使用 WSL 2 的任何潜在冲突,您必须在安装 Docker Desktop 之前卸载通过 Linux 发行版直接安装的任何先前版本的 Docker Engine 和 CLI。

现在一切正常,似乎我的问题是我的 WSL 发行版仍处于版本 1。您可以使用以下命令进行验证:wsl -l -v

  NAME                   STATE           VERSION
* docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2
  Ubuntu-20.04           Running         2 <- This was at 1

升级到 WSL2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM