简体   繁体   中英

nodejs server cannot link Redis and MongoDB in the same Docker-Compose yml file

I built up a express server and link to mongo db and redis db.
I have used docker run server / mongo / redis separately and server works fine.
However, when I used docker-compose , it show errors

redisdb error: { Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 ....
MongoError: failed to connect to server [localhost:27017] on first connect ....

I use docker ps to check and all three containers are running.

Here is my docker-compose.yml

version: "2"
services:
  mongo:
    image: mongo:latest
    ports:
        - "27017:27017"
  redis:
    image: redis:latest
    ports:
        - "6379:6379"
  web:
    build: .
    links:
      - mongo
      - redis
    depends_on:
      - mongo
      - redis
    ports:
      - "3000:3000"

Here is how I set db connection

client = redis.createClient({ "host": process.env.REDIS_PORT_6379_TCP_ADDR || 'localhost', "port": "6379" });
mongoose.connect(`mongodb://${process.env.MONGO_PORT_27017_TCP_ADDR || 'mongodb://localhost:27017/chichat'}`);

I have also try docker-compose stop && docker-compose rm && docker-compose up but still fail.

You try to connect to localhost instead of connecting to redis or mongo container. It happens because environment variables REDIS_PORT_6379_TCP_ADDR and MONGO_PORT_27017_TCP_ADDR does not set.

You have 2 ways to fix this issue:

1) define redis and mongo host names in your application.

client = redis.createClient({ "host":'redis', "port": "6379" });
mongoose.connect('mongodb://mongo:27017/chichat'});

2) define environment variables REDIS_PORT_6379_TCP_ADDR and MONGO_PORT_27017_TCP_ADDR in docker-compose.yml file

version: "2"
services:
  mongo:
    image: mongo:latest
    ports:
        - "27017:27017"
  redis:
    image: redis:latest
    ports:
        - "6379:6379"
  web:
    build: .
    links:
      - mongo
      - redis
    depends_on:
      - mongo
      - redis
    ports:
      - "3000:3000"
    environment:
      - REDIS_PORT_6379_TCP_ADDR:"redis:6379"
      - MONGO_PORT_27017_TCP_ADDR:"mongodb://mongo:27017"

The second way can contains some errors. I don`t think how exactly ULRs must be presents in nodejs.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM