图:找不到模块 – docker运行工作

我试图用一个最小的节点应用程序运行。

(编辑:从fig.yml中删除卷)

fig.yml:

 example: build: . command: node server.js ports: - "4000:4000" links: - postgres postgres: image: postgres 

Dockerfile:

 FROM node ADD . /src WORKDIR /src RUN npm install 

server.coffee:

 express = require 'express' app = express() app.get "/", (req, res) -> res.send "Hello World" server = app.listen 4000, () -> console.log 'Listening on port %d', server.address().port 

fig build按预期收益。 fig up与失败:

 example_1 | module.js:340 example_1 | throw err; example_1 | ^ example_1 | Error: Cannot find module '/src/server.js' example_1 | at Function.Module._resolveFilename (module.js:338:15) example_1 | at Function.Module._load (module.js:280:25) example_1 | at Function.Module.runMain (module.js:497:10) example_1 | at startup (node.js:119:16) example_1 | at node.js:906:3 

我不明白的是,我可以在没有无花果的容器(无花果build成)中运行服务器:

 $ docker run -it dockerexample_example /bin/bash root@58d25759047a:/# node /src/server.js Listening on port 4000 

要么

 $ docker run -it dockerexample_example Listening on port 4000 

要么

 $ docker run -it -p 4000:4000 dockerexample_example Listening on port 4000 

无花果试图运行这个容器的方式有什么不同?

这些文件可以在这里find: https : //github.com/skyl/docker-example

不同的是volumes 。 在docker run示例中,您没有指定任何卷,但是在fig.yml中,将当前工作目录挂载到容器中的/src ,因此在构build过程中添加的/src被卷掩蔽, node_modules不可用。

我认为你应该没问题从fig.yml删除volumes ,否则你将不得不在容器外运行npm install。