Deploy Dockerized Node with mongoDB on Heroku, can't find mongo address

Viewed 283

I'm trying to deploy my Node.js, express, mongoDB Dockerized on Heroku. After building the image, in the Heroku logs i see:

2020-03-07T12:51:12.880526+00:00 heroku[web.1]: Starting process with command `npm start`
2020-03-07T12:51:16.087665+00:00 app[web.1]: 
2020-03-07T12:51:16.087677+00:00 app[web.1]: > esemeny-back@1.0.0 start /usr/src/app
2020-03-07T12:51:16.087678+00:00 app[web.1]: > node server.js
2020-03-07T12:51:16.087678+00:00 app[web.1]: 
2020-03-07T12:51:16.937790+00:00 app[web.1]: app error { Error: getaddrinfo ENOTFOUND mongo mongo:27017
2020-03-07T12:51:16.937806+00:00 app[web.1]: at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
2020-03-07T12:51:16.937807+00:00 app[web.1]: name: 'MongoNetworkError',
2020-03-07T12:51:16.937807+00:00 app[web.1]: errorLabels: [ 'TransientTransactionError' ],
2020-03-07T12:51:16.937808+00:00 app[web.1]: [Symbol(mongoErrorContextSymbol)]: {} }
2020-03-07T12:51:16.948788+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-03-07T12:51:16.949327+00:00 app[web.1]: npm ERR! errno 1
2020-03-07T12:51:16.951211+00:00 app[web.1]: npm ERR! esemeny-back@1.0.0 start: `node server.js`
2020-03-07T12:51:16.951445+00:00 app[web.1]: npm ERR! Exit status 1
2020-03-07T12:51:16.951838+00:00 app[web.1]: npm ERR!
2020-03-07T12:51:16.952103+00:00 app[web.1]: npm ERR! Failed at the esemeny-back@1.0.0 start script.
2020-03-07T12:51:16.952335+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

With local docker-compose everything is working fine, I am able to connect to mongo from my server.

Here is my Dockerfile:

FROM node:10

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 9000

CMD ["npm", "start"]

And my docker-compose.yml

version: '3'
services:
  mongo: 
    container_name: mongo
    image: mongo
    ports:
      - '27017:27017'
  app:
    container_name: docker-node-mongo
    restart: always
    build: .
    ports:
      - '9000:3000'
    links:
      - mongo

And finally, this is my mongoose connection from server.js

mongoose
  .connect('mongodb://mongo:27017/events_db', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false,
  })
  .then(() => {
    app.listen(process.env.PORT, err => {
      if (!err) {
        log.info(`Server started on port ${process.env.PORT}`);
        log.info(`Server mode: ${process.env.NODE_ENV}`);
      }
    });
  })
  .catch(err => {
    log.error(err);
    process.exit(1);
  });

Any ideas? I've tried to add my mongo ip to Heroku's config variables, no luck.

0 Answers
Related