Docker挂载主机React目录至容器报错:sh:1: react-scripts: not found
解决Docker挂载volume后react-scripts找不到的问题
问题原因
当你用-v $(pwd):/app把主机目录挂载到容器的/app时,容器中通过RUN npm install生成的node_modules目录会被主机目录覆盖——因为主机当前目录里没有node_modules(或者即使有,也不是容器内Node环境安装的版本),而react-scripts命令存放在node_modules/.bin下,自然就找不到了。
解决方案
方案1:保留容器内的node_modules目录
运行容器时,额外添加一个匿名卷来挂载容器内的/app/node_modules,这样主机目录的挂载就不会覆盖这个目录:
docker run -p 5005:3000 -v $(pwd):/app -v /app/node_modules --name react-app21 react-application:1
这个命令里,第二个-v /app/node_modules会让Docker创建一个匿名卷,专门保存容器内的node_modules,既不会被主机目录覆盖,又能同步主机目录的其他文件变更,完美适配开发场景。
方案2:在主机目录安装依赖(可选)
如果你想让主机和容器共享依赖,可以在WSL的当前目录下执行:
npm install
注意要保证主机安装的依赖和容器内Node 18版本兼容,之后再挂载目录运行容器。不过这种方法可能因为主机和容器的环境差异出问题,不如方案1稳定。
验证方法
容器启动后,执行docker exec -it react-app21 sh进入容器,再运行ls /app/node_modules,确认目录存在且包含react-scripts相关文件即可。
内容的提问来源于stack exchange,提问作者Mohammed Omar
相关产品推荐
相关产品推荐

