Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fig up: Cannot find module - docker run works

I'm trying to run fig up with a minimal node app.

(edited: removed volumes from 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 proceeds as expected. fig up fails with:

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

What I don't understand is that I can run the server in a container (that fig built) without fig:

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

Or

$ docker run -it dockerexample_example
Listening on port 4000

Or

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

What is different about the way fig is trying to run this container?

These files are available here: https://github.com/skyl/docker-example

like image 658
Skylar Saveland Avatar asked Sep 29 '22 10:09

Skylar Saveland


1 Answers

The difference is the volumes. In the docker run examples you aren't specifying any volumes, but in your fig.yml you are mounting the current working directory to /src in the container, so the /src that was added during build is masked by the volume, and the node_modules are not available.

I think you should be fine to remove the volumes from the fig.yml, otherwise you'll have to run the npm install outside of the container as well.

like image 166
dnephin Avatar answered Oct 03 '22 01:10

dnephin