npm ERR! enoent ENOENT:找不到文件或目录,打开'/app/package.json'。

4
我是一个有用的助手,可以为您翻译文本。
我被卡住了。正在通过Udemy.com上的Grider课程学习Docker。
每当我执行以下操作时,我都会收到以下错误:
docker run -p 3000:3000 -v /app/node_modules -v $(pwd):/app 5932996c40dc

npm ERR! path /app/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-01-30T23_04_17_890Z-debug.log

我注释掉了这个命令,因为我想要看看它试图执行什么并返回的结果是:

docker run -p 3000:3000 -v /app/node_modules -v /mnt/c/projects/courses/docker_kubernetes/frontend:/app 5932996c40dc

我没有使用-v来运行镜像,这样我就可以启动容器并通过exec -it进入容器,查看容器中的内容。容器内显示的一切都是应该的。它将所有内容复制到了容器中的/app目录下。

enter image description here

我用来构建镜像的命令是docker build -f Dockerfile.dev .,并从本地版本中删除node_modules
这是我的存储库的副本,其中包含Dockerfile等:https://github.com/ishraqiyun77/docker_kubernetes
在Windows 10专业版上的Windows子系统中运行,在WSL中运行docker-client,在VMWare Workstation Player 15中运行docker-daemon。 我确保使用了.env文件,其中包含CHOKIDAR_USEPOLLING=true。尚不确定是否存在配置问题,但是谁知道呢,可能会出现问题。
此外,在容器或本地文件系统中都不存在/root/.npm/_logs/2019-01-30T23_04_17_890Z-debug.log
我还将WSL更改为使用路径/c/projects而非/mnt/c/projects

2
我非常确定发生的情况是,当您在Docker运行命令中挂载$(pwd)时,它会用frontend目录中的任何内容覆盖包含package.json的目录,这个目录很可能不包含package.json。通过使用-v /app/node_modules -v $(pwd):/app,您想要实现什么? - Jack Gore
package.json文件同时存在于本地和容器副本中。 -v /app/node_modules应该只使用容器中的node_modules副本,以便可以删除本地副本。-v $(pwd):/app将当前目录(/mnt/c/projects/courses/docker_kubernetes/frontend)的所有内容复制到容器中的/app中。-v应该创建一个卷,以便在不重新构建容器的情况下反映本地副本中的更改。 - cjones
我猜我最感兴趣的是docker_kubernetes/frontend的内容,因为它在你提供的Github存储库中不存在。 - Jack Gore
抱歉,那有点混乱。我已经修复了。 - cjones
你是怎么修复它的,@sockpuppet? - Veeshoo
很抱歉,我没有。 - cjones
2个回答

2
我也在通过Udemy.com学习Grider的关于Docker的课程,和你遇到了完全相同的问题。由于我使用的是Windows 10 Home Edition,无法使用Docker Desktop(Windows),我只能使用Docker Toolbox。
在我的情况下,我正在尝试运行:
xwy52@JFC-DELL MINGW64 /d/Git/LearnDevOps/docker/images/frontend (master) $ docker run -p 3000:3000 -v /app/node_modules -v $(pwd):/app 5d83ae77af14
我遇到了和你相同的问题,对我来说解决办法是为VirtualBox中的默认虚拟机配置另一个共享文件夹,如下面截图所示: 为默认虚拟机配置共享文件夹

非常抱歉晚了这么久才回复。我在 VMware Player 中尝试了类似的 Shared Folders 操作,但遇到同样的错误。然后我尝试设置 VirtualBox,但无法让 WSL 连接到在 VirtualBox 中运行的虚拟机。您能指向一个设置指南吗?奇怪的是 VMware 中的 Docker 可以正常工作,而 VirtualBox 中却不行...我在工作和家用电脑上测试,都遇到了同样的问题。这是我用来设置 VMware 和 VirtualBox 的内容:https://nickjanetakis.com/blog/docker-tip-73-connecting-to-a-remote-docker-daemon - cjones
我也正在学习这门课程,使用的是Windows 10家庭版,配合VirtualBox和Docker Toolbox。我遇到了同样的问题。非常感谢你的回答,它帮助我解决了我的问题。 - otmarvonwien

1
我尝试按照Wenyan的建议通过Virtual Box将代码所在位置添加到共享文件夹中,但没有成功。
对我来说有效的方法是将我的代码移动到C:// Users // {username},因为Virtual Box中C驱动器被指定为存储位置。在移动代码后,我运行docker命令时没有遇到任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接