Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将本地源文件装载到docker容器?_Node.js_Docker - Fatal编程技术网

Node.js 如何将本地源文件装载到docker容器?

Node.js 如何将本地源文件装载到docker容器?,node.js,docker,Node.js,Docker,我是docker的新手,我已经创建了自己的自定义图像 这是我的文件 FROM node:latest MAINTAINER FF COPY . /var/www WORKDIR /var/www RUN npm install EXPOSE 3000 ENTRYPOINT ["npm", "start"] 然后,我用 docker build -t test/node . 图像建立后,我运行 docker run -p 8888:3000 -v $(pwd):/var/www

我是docker的新手,我已经创建了自己的自定义图像

这是我的文件

FROM node:latest

MAINTAINER FF

COPY . /var/www

WORKDIR /var/www

RUN npm install  

EXPOSE 3000

ENTRYPOINT ["npm", "start"]
然后,我用

docker build -t test/node .
图像建立后,我运行

docker run -p 8888:3000 -v $(pwd):/var/www -w "/var/www" test/node
我使用-v是因为我想将我的主机src文件夹装载到/var/www

结果是

> expresssite@0.0.0 start /var/www
> node ./bin/www

module.js:472
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/www/app.js:1:77)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)

npm info lifecycle expresssite@0.0.0~start: Failed to exec start script
npm ERR! Linux 4.4.39-moby
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start"
npm ERR! node v7.4.0
npm ERR! npm  v4.0.5
npm ERR! code ELIFECYCLE
npm ERR! expresssite@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the expresssite@0.0.0 start script 'node ./bin/www'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the expresssite package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node ./bin/www
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs expresssite
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls expresssite
npm ERR! There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! Please include the following file with any support request:
npm ERR!     /var/www/npm-debug.log
我想问题是我的src文件夹没有express模块,但我已经在我的映像中安装了npm,我想这就是我所需要的


我做错了什么?有人能帮我吗?非常感谢

问题在于拷贝和卷的组合

发生了什么事

在创建图像时,将源代码复制到Docker图像 npm安装在映像内部运行,因此不会影响源代码 但是,当您装载卷时,它会覆盖/var/www,从而有效地执行步骤1。二,。无用的
您要做的是在启动docker之前或在docker内部运行npm安装。

您创建了一个映像,在映像内的/var/www文件夹中运行npm安装。此安装未在主机文件系统上进行

然后,您使用该映像启动了一个容器,并将主机文件系统装载到/var/www。该文件系统覆盖了映像中该位置存在的所有内容,因此,除非您在主机上运行它们,否则之前在该位置进行的安装是不可见的

你的选择包括:

对于装载到容器中的文件/文件夹,要有更多的选择,也许所有代码都会进入一个子目录,然后装载该子目录。 在主机上执行npm安装。您可以在容器启动时执行此操作,以便如果需要,可执行文件位于容器内。 为所做的每个更改重新生成容器。这并不理想,但您可以重新构造Dockerfile命令,以便仅在末尾复制最频繁的更改,以便docker可以缓存以前的层。
复制是不合逻辑的/var/www,在docker run to do-v$pwd:/var/www中,这样做可以擦除副本中的内容。我选择了你的选项2,但现在我正在运行一个关于更新我的源代码的问题,该问题在我刷新时不会反映在页面上。我错过什么了吗?我想我总是可以使用-v将src安装到容器中+1我对nodejs不太熟悉,不知道它什么时候处理JS文件,但我猜它只是在默认情况下启动的。似乎有各种实时重新加载实用程序可能会有所帮助。谢谢,我修复了npm安装问题,但如何将当前源文件夹装入容器中,以便每次更新源代码时它也会更新容器+1.