首页 > 解决方案 > 通过 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。

标签: node.jsdockerdocker-composenode-modulesyarnpkg

解决方案


推荐阅读