docker - npm + wsl + docker 和卷挂载有什么解决方案?
问题描述
我想从事一个依赖 Docker 和 NPM 的 Web 项目(这实际上是一个 LAMP 服务器)。我在 WSL 上运行,Docker 守护程序在 Windows 上运行。
这是我的限制:
- 要使用 Docker 挂载卷,我必须在 Windows 文件系统上找到我的项目,例如
/mnt/c/...
- 要使用
npm
哪个软链接,我必须在 WSL 文件系统上找到我的项目,例如/srv/...
显然我不能满足这两个要求。
例如,如果我在位于 Windows 文件系统上的文件夹上从 WSL 执行 npm install ,我会收到很多错误,例如:
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
或者,只是模块不起作用webpack not found
如果我将我的项目移动到 WSL 端,Docker 将无法将我的项目安装在我的目标容器上......
我可以使用什么替代方案?
解决方案
使用 WSL 时,Docker for Windows 希望您以与以下格式匹配的格式提供卷路径:/c/Users/username/dev/myapp
.
但是 WSL 使用该/mnt/c/Users/username/dev/myapp
格式。
您必须将 WSL 配置为安装在/
而不是/mnt
.
创建和修改新的 WSL 配置文件:
sudo nano /etc/wsl.conf
# Now make it look like this and save the file when you're done:
[automount]
root = /
options = "metadata"
我们需要设置 root = / 因为这将使您的驱动器安装在 /c 或 /e 而不是 /mnt/c 或 /mnt/e。
options = "metadata" 行不是必需的,但它将修复 WSL 挂载上的文件夹和文件权限,因此 WSL 挂载中的所有内容都不是 777。我强烈建议你这样做!
进行这些更改后,请退出并重新登录 Windows 以确保更改生效
来源: https ://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawless
推荐阅读
- python - 您如何得知用户已停止输入?
- php - PHP:选中时在下一页上显示从一个表到另一个表的列的完整值
- javascript - How can I replace the user prompt which currently determines the variable's value with an input box?
- dart - Widget is being rebuilt when Child Widget is calling a Push Named
- java - 春季启动 RequestBody 不起作用
- javascript - 没有调用函数,javascript向对象添加属性
- linux - wait_event_interruptible 和 wake_up_interruptible 需要 20 毫秒到 30 毫秒
- python - Efficiently grouping sets based on number of similar items
- javascript - 在 JSON 响应中将字符串 true/false 转换为布尔值
- python - Python Search and Replace new lines