图:找不到模块 – 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。