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)

  • Docker - Ubuntu - Nginx - MariaDB - Connection refused
  • Can't reach ActiveMQ Port on Docker from my host
  • How to display the docker current configuration?
  • cf ic plugin not able to find docker daemon while authentication
  • how to reach another container from a dockerised nginx
  • With Docker based AWS ElasticBeanstalk Applications, does 'Restart App Server(s)' on the environment ALWAYS pull down a new docker image
  • fig.yml:

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


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


    $ docker run -it dockerexample_example
    Listening on port 4000


    $ 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:

  • Run nodejs application on subpath with haproxy
  • “line 36: cd: HOME not set” in running Boot2Docker installed using Docker for Windows Installer v1.6.0
  • application configuration as a docker image
  • What is the default webapp location on the tomcat8 docker container?
  • How to mimic '--volumes-from' in Kubernetes
  • Port forward for mysql replication (within docker)
  • One Solution collect form web for “Fig up: Cannot find module – docker run works”

    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.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.