Docker volumes on Windows WSL2

爱⌒轻易说出口 提交于 2021-01-21 05:04:31

问题


I'm just trying out WSL 2 with Docker for Windows and I'm having an issues with mounted volumes :

version: "3.7"

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

the container build and start well, I access it with docker exec nicely but the /app folder inside the container isn't bound to my laptop app folder. However the right path is actually correctly mounted on the running container :

(here I do pwd on the host to if it matches perfectly with what is mounted on the container)

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

And this is screen of portainer telling me what path are mounted where in the container and everything matches.

The file I create int he app folder on the host are not visible in the app folder of the container and vice-versa. This is weird and I don't know how to debug it.

Complementary infos:

  • Windows 10 Pro 10.0.19041
  • Docker for Windows version : 2.3.0.4
  • docker version output in WSL : 19.03.12
  • docker-compose version : 1.26.2

Thanks


回答1:


As @Pablo mentioned, the Best-Practice seems to be using WSL File system for mapping Volumes.

Take a look at the Docker Documentation concerning WSL2:

Best practices

  1. To get the best out of the file system performance when bind-mounting files:
    • Store source code and other data that is bind-mounted into Linux containers (i.e., with docker run -v <host-path>:<container-path>) in the Linux filesystem, rather than the Windows filesystem.
    • Linux containers only receive file change events (“inotify events”) if the original files are stored in the Linux filesystem.
    • Performance is much higher when files are bind-mounted from the Linux filesystem, rather than remoted from the Windows host. Therefore avoid docker run -v /mnt/c/users:/users (where /mnt/c is mounted from Windows).
    • Instead, from a Linux shell use a command like docker run -v ~/my-project:/sources <my-image> where ~ is expanded by the Linux shell to $HOME.
  2. If you have concerns about the size of the docker-desktop-data VHDX, or need to change it, take a look at the WSL tooling built into Windows.
  3. If you have concerns about CPU or memory usage, you can configure limits on the memory, CPU, Swap size allocated to the WSL 2 utility VM.
  4. To avoid any potential conflicts with using WSL 2 on Docker Desktop, you must uninstall any previous versions of Docker Engine and CLI installed directly through Linux distributions before installing Docker Desktop.



回答2:


Everything works perfectly now, it seems that my problem was that my WSL distro was still in version 1. You can verify it with the command : wsl -l -v

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

Upgrade to WSL2



来源:https://stackoverflow.com/questions/63552052/docker-volumes-on-windows-wsl2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!