【问题标题】:docker compose empty volumes (if folder) mount from wsl using docker toolboxdocker使用docker工具箱从wsl组成空卷(如果是文件夹)挂载
【发布时间】:2020-01-16 22:29:59
【问题描述】:

我正在运行 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。但是,如果我查看文件夹内部,它是空的。

以下是我为使 docker 在我有 docker 工具箱的 Windows 10 Home 系统中工作所做的工作。

以下是将我的 Windows 机器中的 Ubuntu WSL 与 Docker Toolbox 连接起来的配置。

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

[automount]
root = /
options = "metadata"

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

谢谢。

【问题讨论】:

  • 1.您是否尝试过使用 Windows 版本的 docker-compose.exe?结果一样吗? 2. 目录在哪里?例如 /test_folder 在 c:\Users\ ..... ?
  • 是的。项目文件夹位于 c:/Users 目录中。我的 Windows 机器中确实有 docker-compose。但是,由于我使用的是 Ubuntu WSL,我认为它使用了自己的 docker-compose。 C:\Users\bikash>docker-compose --version docker-compose version 1.23.2, build 1110ad01
  • 好吧,如果你还没有在 WSL 中安装 docker-compose for Linux,你可能正在使用 WSL 的 Windows 版本。如果您使用的是 Linux,我不知道发生了什么。
  • docker-compose 安装在我的 ubuntu wsl 中。我可以看到 Windows 的 docker 工具箱中的 docker-compose 和我的 ubuntu wsl 的 docker-compose 也不同。 docker 工具箱中的 docker-compose bikash@DESKTOP-VGO9UIB MINGW64 /c/Program Files/Docker Toolbox $ docker-compose --version docker-compose version 1.23.2, build 1110ad01 ubuntu wsl 中的 docker-compose ``` /c docker-compose --version docker-compose 版本 1.22.0,构建 f46880fe```

标签: docker ubuntu docker-compose windows-subsystem-for-linux docker-toolbox


【解决方案1】:

如果您运行 docker-compose 的目录是 WSL /home 目录,这将不起作用。

您需要有 WSL 文件系统之外的文件,这些文件将映射到 docker 映像安装的 Windows 共享。默认情况下,docker 工具箱将 windows C 挂载到 boot2docker VM 中的 /c。这就是为什么在 WSL 中建议添加 /root 自动挂载。因此,您将在 /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

【讨论】:

  • 感谢您的 cmets。我将来会尝试这些方法,但目前我最好的解决方案是安装 ubuntu。在 ubuntu 上运行 docker 没有问题,而且项目在 Makefile 中有 linux 命令。我希望 windows 能提供与 linux 操作系统相同的体验。
【解决方案2】:

我遇到了一个非常相似的错误,结果证明是安装在 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"

已解决此问题

【讨论】:

  • 我想你正在使用 wsl2 ? afai 试过了 - 我不能用 wsl1 做到这一点:(
  • The command 'docker-compose' could not be found in this WSL 1 distro. We recommend to convert this distro to WSL 2 and activate the WSL integration in Docker Desktop settings. See https://docs.docker.com/docker-for-windows/wsl/ for details. - 即使以/mnt/c/Program\ Files/Docker/Docker/resources/bin/docker-compose 明确运行也是如此
  • 天哪!我找到了! /mnt/c/Program\ Files/Docker/Docker/resources/bin/ 中有一个名为 docker-compose 的 sh 文件,与 docker-compose.exe 并排出现此错误!我想它试图作为一个友好错误的后备,但可能有一些关于路径分辨率的无效假设会导致这种怪癖
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 2020-10-29
  • 2020-01-20
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多