docker使用docker工具箱从wsl装载空卷(如果是文件夹)

docker使用docker工具箱从wsl装载空卷(如果是文件夹),docker,ubuntu,docker-compose,windows-subsystem-for-linux,docker-toolbox,Docker,Ubuntu,Docker Compose,Windows Subsystem For Linux,Docker Toolbox,我正在运行docker compose命令以在docker中运行应用程序。但是,在yml中定义的卷是空的。如果我挂载一个文件,它就工作了。但是,当我从windows挂载目录时,我可以看到该目录,但它是空的 这是我的docker compose命令 docker-compose -f docker-compose.dev.yml -f docker-compose.test.yml -f docker-compose.test.local.yml run --rm app /bin/sh 以下是

我正在运行docker compose命令以在docker中运行应用程序。但是,在yml中定义的卷是空的。如果我挂载一个文件,它就工作了。但是,当我从windows挂载目录时,我可以看到该目录,但它是空的

这是我的docker compose命令

docker-compose -f docker-compose.dev.yml -f docker-compose.test.yml -f docker-compose.test.local.yml run --rm app /bin/sh
以下是我的yml文件的内容:

version: "3"
services:
  app:
    environment:
      - NODE_ENV=test
      - TEST_DB_HOSTNAME=database
      - DB_HOSTNAME=database
      - DB_MIGRATE_ENV=test-docker
    volumes:
      - .jshintignore:/home/test_app/src/.jshintignore
      - .jshintrc:/home/test_app/src/.jshintrc
      - ./nuke-rebuild-test-db.js:/home/gofar/src/nuke-rebuild-test-db.js
      - ./test_folder:/home/test_app/src/test_folder
      - ./database:/home/test_app/src/database
      - ./server:/home/test_app/src/server
      - ./common:/home/test_app/src/common
      - ./coverage:/home/test_app/src/coverage
从上面,nuke-rebuild-test-db.js文件被复制到容器中。我也可以看到test_文件夹。但是,如果我查看文件夹内部,它是空的

下面是我在Windows 10 Home系统中使用docker工具箱时所做的工作

下面是将我的windows机器中的Ubuntu WSL与Docker工具箱连接起来的配置。

为了使我的根目录与linux兼容,我在/etc/wsl.conf文件中添加了以下内容

[automount]
root = /
options = "metadata"
我已经在Oracle VM虚拟机中的共享文件夹列表中添加了我的应用程序文件夹,即使单个文件正在装入


谢谢。

如果您运行docker compose的目录是WSL/主目录,那么这将不起作用

您需要在WSL文件系统之外拥有文件,该文件系统将映射到docker映像装载的windows共享。默认情况下,docker toolbox将windows C装载到boot2docker VM中的/C。这就是为什么在WSL中建议添加/root自动装载。因此,您将拥有C:drive-in/C。但是没有人写wsl中的/home和windows docker toolbox中的卷装载,windows docker toolbox正在为docker使用虚拟盒映像

这里已经讨论了同样的问题:


如果您运行docker compose的目录是WSL/主目录,那么这将不起作用

您需要在WSL文件系统之外拥有文件,该文件系统将映射到docker映像装载的windows共享。默认情况下,docker toolbox将windows C装载到boot2docker VM中的/C。这就是为什么在WSL中建议添加/root自动装载。因此,您将拥有C:drive-in/C。但是没有人写wsl中的/home和windows docker toolbox中的卷装载,windows docker toolbox正在为docker使用虚拟盒映像

这里已经讨论了同样的问题:


我有一个非常类似的错误,这是安装在WSL中的docker compose的一个问题。WSL内部安装的docker compose版本未正确处理卷绑定。通过从WSL安装中删除/usr/local/bin/docker-compose,并将windows exe别名改为docker-compose=/mnt/c/Program\Files/docker/docker/resources/bin/docker-compose.exe来修复此问题。我遇到了一个非常类似的错误,结果是安装在WSL中的docker-compose出现了问题。WSL内部安装的docker compose版本未正确处理卷绑定。通过从WSL安装中删除/usr/local/bin/docker-compose,并将windows exe别名改为docker-compose=/mnt/c/Program\Files/docker/docker/resources/bin/docker-compose.exe来修复此问题。您是否使用Windows版本的docker-compose.exe尝试过相同的方法?同样的结果?2.目录在哪里?例如/test_文件夹位于c:\Users\?对项目文件夹位于c:/Users目录中。我的windows计算机中有docker compose。但是,由于我使用的是Ubuntu WSL,我认为它使用了自己的docker compose。C:\Users\bikash>docker compose-version docker compose version 1.23.2,build 1110ad01Well,如果您尚未在WSL中安装docker compose for Linux,请检查它。您可能正在使用WSL中的Windows版本。如果你使用的是Linux,我不知道发生了什么。docker-compose安装在我的ubuntu wsl中。我可以看到windows docker工具箱中的docker compose和ubuntu wsl中的docker compose也不同。docker工具箱中的docker composebikash@DESKTOP-VGO9UIB MINGW64/c/Program Files/Docker Toolbox$Docker compose-版本Docker compose版本1.23.2,在ubuntu wsl```/c docker compose中构建1110ad01 docker compose-version docker compose version 1.22.0,构建f46880fe``1。您是否使用Windows版本的docker-compose.exe尝试过相同的方法?同样的结果?2.目录在哪里?例如/test_文件夹位于c:\Users\?对项目文件夹位于c:/Users目录中。我的windows计算机中有docker compose。但是,由于我使用的是Ubuntu WSL,我认为它使用了自己的docker compose。C:\Users\bikash>docker compose-version docker compose version 1.23.2,build 1110ad01Well,如果您尚未在WSL中安装docker compose for Linux,请检查它。您可能正在使用WSL中的Windows版本。如果你使用的是Linux,我不知道发生了什么。docker-compose安装在我的ubuntu wsl中。我可以看到windows docker工具箱中的docker compose和ubuntu wsl中的docker compose也不同。docker工具箱中的docker composebikash@DESKTOP-VGO9UIB MINGW64/c/Program Files/Do
cker工具箱$docker compose版本docker compose版本1.23.2,在ubuntu wsl中构建1110ad01 docker compose``/c docker compose版本docker compose版本1.22.0,构建f46880fe``感谢您的评论。我将来会尝试这些方法,但目前我最好的解决方案是安装ubuntu。在ubuntu上运行docker没有问题,而且项目在Makefile中有linux命令。我希望windows能提供与linux操作系统相同的体验。谢谢您的评论。我将来会尝试这些方法,但目前我最好的解决方案是安装ubuntu。在ubuntu上运行docker没有问题,而且项目在Makefile中有linux命令。我希望windows能提供与linux操作系统相同的体验。我想您使用的是wsl2?afai尝试过-我不能用wsl1做到这一点:在这个wsl1发行版中找不到命令“docker compose”。我们建议将此发行版转换为WSL 2,并在Docker桌面设置中激活WSL集成。看见https://docs.docker.com/docker-for-windows/wsl/ 详情请参见甚至当显式运行为/mnt/c/Program\Files/Docker/Docker/resources/bin/Docker composeomg时也是如此!我找到了!在/mnt/c/Program\Files/Docker/Docker/resources/bin/中有一个名为Docker-compose的sh文件,它与Docker-compose.exe并排出现此错误!我想这是试图作为友好错误的回退,但可能存在一些关于路径分辨率的无效假设,如果您使用的是wsl2?afai尝试过-我不能用wsl1做到这一点:在这个wsl1发行版中找不到命令“docker compose”。我们建议将此发行版转换为WSL 2,并在Docker桌面设置中激活WSL集成。看见https://docs.docker.com/docker-for-windows/wsl/ 详情请参见甚至当显式运行为/mnt/c/Program\Files/Docker/Docker/resources/bin/Docker composeomg时也是如此!我找到了!在/mnt/c/Program\Files/Docker/Docker/resources/bin/中有一个名为Docker-compose的sh文件,它与Docker-compose.exe并排出现此错误!我想这是试图作为一个友好错误的回退,但可能有一些关于路径分辨率的无效假设导致了这种怪癖