node.js - 通过 docker exec 运行时,纱线很慢并且冻结
问题描述
我最近开始使用 docker(Windows 桌面版)进行节点项目开发。我有一个带有卷配置的 docker-compose 文件,用于在我的主机和 docker 容器之间共享项目源文件。
当我需要安装一个新的模式模块时,我不能在我的主机上这样做,当然,因为它是 Windows 并且 docker 是 Linux 什么的,所以我运行docker exec -it my-service bash
“进入”docker容器,然后yarn add something
从内部运行它。问题是 -yarn
运行速度非常慢并且几乎一直冻结。然后 docker 容器变得无响应,我无法取消yarn
命令或使用停止容器docker-compose stop
. 我发现恢复的唯一方法是重新启动整个 docker 引擎。因此,为了最终安装新模块,在 docker 引擎重新启动后,我删除了 node_modules 文件夹并再次执行相同的步骤。这次它仍然非常慢,但它并没有以某种方式冻结并且实际上安装了新模块。但是过了一段时间,当我需要再次这样做时,它再次冻结,我必须再次删除 node_modules ......
我想找出yarn
命令这么慢的原因以及它冻结的原因。
我是 docker 新手,所以我的工作流程可能不正确。
我尝试将 docker 引擎的 RAM 限制从 2 GB 增加到 8 GB,并将 CPU 限制从 1 增加到 8,但这对yarn
命令行为完全没有影响。
我的项目正在使用文件监视chokidar
,所以我认为这可能会导致问题,但禁用它也没有效果。
我还认为问题可能是主机(Windows)和docker容器之间的文件共享机制,但如果是这种情况,我不知道如何解决它。我想我应该以某种方式将 node_modules 从源目录中分离出来,并使它们对 docker 容器私有,这样它们就不会与主机共享。
这是一个非常严重的问题,因为它大大减慢了开发速度。请分享您对可能出现问题的任何想法。如果问题是由 Windows 和 docker 容器之间的文件共享机制引起的,我什至会考虑将我的开发环境更改为 Linux。
解决方案
推荐阅读
- kubernetes - flink 可以运行多个相同的作业来实现伪动态缩放吗?
- javascript - 如何从必须通过测试的新数组中返回包含对象的数组中的特定值?
- html - 如何使用具有相同样式和字体的apache POI在网页中显示excel表?
- python - Python - 在虚拟环境中安装包
- python - 了解序列解包:为什么使用集合会抛出“SyntaxError:无法分配给文字”?
- javascript - 如何使用 JavaScript 更改输入中的特定值
- javascript - 反应上下文不更新
- android - 使用共享首选项保存警报对话框的值
- reactjs - 无法使用 React 呈现 onclick 事件
- c# - 什么时候处理对象?C#