5

我正在尝试fig up使用最小的节点应用程序运行。

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

图.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

服务器.咖啡:

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

我不明白的是,我可以在没有 fig 的容器(构建的 fig)中运行服务器:

$ 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

fig 尝试运行此容器的方式有什么不同?

这些文件可在此处获得:https ://github.com/skyl/docker-example

4

1 回答 1

4

不同的是volumes。在docker run 示例中,您没有指定任何卷,但在您fig.yml将当前工作目录安装到/src容器中,因此/src在构建期间添加的内容被卷屏蔽,并且 node_modules 不可用。

我认为您应该可以volumes从中删除fig.yml,否则您还必须在容器外部运行 npm install 。

于 2014-11-09T19:46:03.210 回答