title: Docker compose up 'Exec format error' loading a library
body: <p>I'm developing a multi-module docker nodejs app with docker-compose. There's an issue with the <a href="https://www.npmjs.com/package/natural" rel="noreferrer">natural</a> node package needed by a module. It seems that it can't exec it. I tried to rebuild it on the fly with a RUN command, but nothing changed.
  Here's the log when trying to run docker-compose up:</p>
  
  <pre><code>web_1         | /app/web-server/node_modules/natural/lib/natural/classifiers/classifier.js:32
  web_1         |     if (e.code !== 'MODULE_NOT_FOUND') throw e;
  web_1         |                                        ^
  web_1         |
  web_1         | Error: Error loading shared library /app/web-server/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: Exec format error
  web_1         |     at Error (native)
  web_1         |     at Object.Module._extensions..node (module.js:597:18)
  web_1         |     at Module.load (module.js:487:32)
  web_1         |     at tryModuleLoad (module.js:446:12)
  web_1         |     at Function.Module._load (module.js:438:3)
  web_1         |     at Module.require (module.js:497:17)
  web_1         |     at require (internal/module.js:20:19)
  web_1         |     at bindings (/app/web-server/node_modules/bindings/bindings.js:81:44)
  web_1         |     at Object.&lt;anonymous&gt; (/app/web-server/node_modules/webworker-threads/index.js:1:105)
  web_1         |     at Module._compile (module.js:570:32)
  web_1         |     at Object.Module._extensions..js (module.js:579:10)
  web_1         |     at Module.load (module.js:487:32)
  web_1         |     at tryModuleLoad (module.js:446:12)
  web_1         |     at Function.Module._load (module.js:438:3)
  web_1         |     at Module.require (module.js:497:17)
  web_1         |     at require (internal/module.js:20:19)
  </code></pre>
  
  <p>Here's the package.json:</p>
  
  <pre><code>{
    "name": "realaffinities",
    "version": "1.0.0",
    "description": "",
    "main": "server/Server.js",
    "keywords": [],
    "author": "",
    "license": "GPL-3.0",
    "dependencies": {
      "async": "^2.5.0",
      "big-integer": "^1.6.23",
      "body-parser": "1.9.0",
      "express": "^4.15.3",
      "express-validator": "^3.2.1",
      "knex": "^0.13.0",
      "mysql": "^2.14.1",
      "natural": "^0.5.4",
      "twit": "^2.2.9",
      "url-exists": "^1.0.3",
      "nodemon": "^1.11.0"
    },
    "devDependencies": {
      "grunt": "^1.0.1",
      "grunt-express-server": "^0.5.3",
      "mocha": "^3.4.2",
      "supertest": "^3.0.0",
      "bcrypt": "1.0.2"
    },
    "scripts": {
      "test": "mocha web-server/test",
      "start": "node server/Server.js"
    }
  }
  </code></pre>
  
  <p>My dockerfile:</p>
  
  <pre><code>FROM node:6.11-alpine
  
  EXPOSE 3000
  ENV NODE_ENV development
  RUN mkdir /app
  WORKDIR /app
  
  # add package.json and run npm install before adding the rest of the files
  # this way, you only run npm install when package.json changes
  ADD /web-server/package.json /app/package.json
  
  RUN apk add --no-cache make gcc g++ python
  
  RUN npm install -g mocha
  RUN npm install
  </code></pre>
  
  <p>I don't know whether it's an issue of this particular node package or a knowledge lack of mine. If I run the same application locally on my mac without docker, it doesn't encounter this problem.</p>