ubuntu docker compose empty volumes(if folder)mount from wsl using docker toolbox

eulz3vhy  于 2023-08-03  发布在  Docker
关注(0)|答案(3)|浏览(98)

我正在运行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_folder。但是,如果我看一下文件夹里面,它是空的。
下面是我在我的Windows 10家庭系统中使用docker工具箱时所做的工作。
下面是连接我的Ubuntu WSL在我的Windows机器与Docker工具箱的配置。x1c 0d1x的数据
为了使我的根目录与linux兼容,我在/etc/wsl.conf文件中添加了以下内容

[automount]
root = /
options = "metadata"


我已经在Oracle VM Virtual Box的共享文件夹列表中添加了我的应用程序文件夹,即使正在装载单个文件。

  • 谢谢-谢谢
stszievb

stszievb1#

如果你运行docker-compose的目录是WSL /home目录,这将不起作用。
你需要有WSL文件系统之外的文件,这些文件将Map到Docker镜像挂载的Windows共享。默认情况下,docker toolbox将windows C挂载到boot 2docker VM中的/c。这就是为什么在WSL中建议添加/ root automount。你会得到你的C:驶入/c .但是没有人写关于wsl中的/home和windows docker工具箱中的卷挂载(它正在为docker使用Virtual Box镜像)
这里已经讨论了同样的问题:https://superuser.com/questions/1344407/docker-on-wsl-wont-bind-mount-home/1378927
https://github.com/docker/for-win/issues/2151

6yt4nkrj

6yt4nkrj2#

我遇到了一个非常类似的错误,结果证明这是WSL中安装的docker-compose的问题。安装在WSL中的docker-compose版本未正确处理卷绑定。通过从WSL安装中删除/usr/local/bin/docker-compose并将Windows exe alias docker-compose="/mnt/c/Program\ Files/Docker/Docker/resources/bin/docker-compose.exe"别名来修复此问题

4smxwvx5

4smxwvx53#

和@Damo一样,我也遇到了一个类似的问题,因为WSL中的docker-compose不能正确绑定卷,导致卷根本不能挂载。
在WSL 2和Docker Desktop中,您可以简单地从使用单独的docker-compose更改为使用docker compose(注意,没有连字符),这是最近添加到Docker的插件来处理这个问题。

相关问题