docker 使用 docker 工具箱从 wsl 安装空卷(如果是文件夹)
docker compose empty volumes (if folder) mount from wsl using docker toolbox
我正在 运行宁 docker 编写命令 运行 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 在我的 Windows 10 Home 系统中工作所做的工作,我有 docker 工具箱。
下面是将 windows 机器中的 Ubuntu WSL 与 Docker 工具箱连接起来的配置。
为了让我的根目录与 linux 兼容,我在 /etc/wsl.conf 文件中添加了以下内容
[automount]
root = /
options = "metadata"
即使正在装载单个文件,我也已将我的应用程序文件夹添加到 Oracle VM Virtual Box 的共享文件夹列表中。
谢谢。
如果您 运行 docker-compose 所在的目录是 WSL /home 目录,这将不起作用。
您需要在 WSL 文件系统之外拥有文件,这些文件将映射到 docker 已装载的图像 windows 共享。默认情况下,docker 工具箱将 windows C 挂载到 boot2docker VM 中的 /c。这就是为什么在 WSL 中建议添加 /root automount。因此,您的 C: 驱动器将位于 /c 中。但是没有人写过 wsl 中的 /home 和 windows docker 工具箱中的卷挂载(它使用 Virtual Box 图像 docker )
这里已经讨论过同样的问题:
https://superuser.com/questions/1344407/docker-on-wsl-wont-bind-mount-home/1378927
我遇到了一个非常相似的错误,结果证明这是安装在 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"
来解决的
我正在 运行宁 docker 编写命令 运行 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 在我的 Windows 10 Home 系统中工作所做的工作,我有 docker 工具箱。
下面是将 windows 机器中的 Ubuntu WSL 与 Docker 工具箱连接起来的配置。
为了让我的根目录与 linux 兼容,我在 /etc/wsl.conf 文件中添加了以下内容
[automount]
root = /
options = "metadata"
即使正在装载单个文件,我也已将我的应用程序文件夹添加到 Oracle VM Virtual Box 的共享文件夹列表中。
谢谢。
如果您 运行 docker-compose 所在的目录是 WSL /home 目录,这将不起作用。
您需要在 WSL 文件系统之外拥有文件,这些文件将映射到 docker 已装载的图像 windows 共享。默认情况下,docker 工具箱将 windows C 挂载到 boot2docker VM 中的 /c。这就是为什么在 WSL 中建议添加 /root automount。因此,您的 C: 驱动器将位于 /c 中。但是没有人写过 wsl 中的 /home 和 windows docker 工具箱中的卷挂载(它使用 Virtual Box 图像 docker )
这里已经讨论过同样的问题: https://superuser.com/questions/1344407/docker-on-wsl-wont-bind-mount-home/1378927
我遇到了一个非常相似的错误,结果证明这是安装在 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"