未找到Docker卷和package.json

时间:2016-08-18 12:10:24

标签: node.js docker

我正在学习docker,我在nodejs应用程序上处理卷时遇到了一些麻烦。

实际上,每次重新启动容器时,我都会想要测试一个简单的应用程序。

这样,我有以下dockerfile:

FROM node:4-onbuild

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

CMD [ "npm", "test" ]

现在,我使用以下方法构建了图像:

docker build -t myapp .

我尝试使用以下脚本运行它:

docker run -v //c/Project/nodejs/my-app:/usr/src/app my-app

docker run -v /c/Project/nodejs/my-app:/usr/src/app my-app

甚至

docker run -v c:/Project/nodejs/my-app:/usr/src/app my-app

我有以下错误告诉我,我在/ usr / src / app中没有package.json文件(但它是我的卷所在的位置,它应该是正确的否?)

npm info it worked if it ends with ok
npm info using npm@2.15.9
npm info using node@v4.5.0
npm ERR! Linux 4.4.15-moby
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "test"
npm ERR! node v4.5.0
npm ERR! npm  v2.15.9
npm ERR! path /usr/src/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 '/usr/src/app/package.json'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/src/app/npm-debug.log

注意:如果我使用COPY命令而不是卷,它可以很好地工作,我可以在docker容器内看到我的nodejs测试

NB2:我在Windows 10上,docker v1.12.0

2 个答案:

答案 0 :(得分:7)

Docker for Windows在运行容器内部的VM中运行(它仍然需要Linux主机)。挂载主机卷时,该卷将安装在Linux主机上。从Linux VM挂载到父Windows操作系统的唯一目录是c:/ Users,它在VM中显示为/ c / Users(请参阅docker's volume tutorial)。将项目移动到Users下的目录并挂载。

空文件夹/丢失文件的原因是,当您将不存在的主机文件夹/文件装入容器时,这是默认设置。在您的情况下,VM中不存在/ c / Project。 COPY有效,因为在构建开始之前,构建会将当前文件夹(除了.dockerignore条目)发送到Docker引擎(在VM中运行)。这是通过API传输的,而不是进行卷安装。

答案 1 :(得分:4)

有时Docker for Windows无法访问文件系统上的文件。它会以静默方式失败,因此它将启动容器并运行您的命令,npm将找不到所需的文件。

您可以通过重新共享所需的驱动器来解决此问题。

  1. 通过右键单击任务栏中的图标来打开Docker for Windows设置
  2. 转到“共享驱动器”标签
  3. 取消选择需要工作的驱动器,然后单击“应用”。
  4. 应用后,再次选择驱动器,然后单击应用。
  5. 在询问时输入您的Windows用户密码。

完成后,您应该能够正常挂载卷。