我正在运行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的共享文件夹列表中添加了我的应用程序文件夹,即使正在装载单个文件。
- 谢谢-谢谢
3条答案
按热度按时间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的
6yt4nkrj2#
我遇到了一个非常类似的错误,结果证明这是WSL中安装的docker-compose的问题。安装在WSL中的docker-compose版本未正确处理卷绑定。通过从WSL安装中删除
/usr/local/bin/docker-compose
并将Windows exealias docker-compose="/mnt/c/Program\ Files/Docker/Docker/resources/bin/docker-compose.exe"
别名来修复此问题4smxwvx53#
和@Damo一样,我也遇到了一个类似的问题,因为WSL中的docker-compose不能正确绑定卷,导致卷根本不能挂载。
在WSL 2和Docker Desktop中,您可以简单地从使用单独的
docker-compose
更改为使用docker compose
(注意,没有连字符),这是最近添加到Docker的插件来处理这个问题。