nodejs服务器无法在同一个Docker-Compose yml文件中链接Redis和MongoDB

时间:2017-02-13 14:07:27

标签: node.js mongodb docker docker-compose

我建立了一个快速服务器并链接到mongo db和redis db 我分别使用docker run server / mongo / redis,服务器工作正常 但是,当我使用docker-compose时,它会显示错误

  

redisdb错误:{错误:Redis连接到localhost:6379失败 - 连接ECONNREFUSED 127.0.0.1:6379 ....
  MongoError:第一次连接时无法连接到服务器[localhost:27017] ....

我使用docker ps检查并且所有三个容器都在运行。

这是我的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"

以下是我设置数据库连接的方法

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'}`);

我也试过docker-compose stop && docker-compose rm && docker-compose up但仍然失败。

1 个答案:

答案 0 :(得分:1)

您尝试连接到localhost而不是连接到redis或mongo容器。这是因为环境变量REDIS_PORT_6379_TCP_ADDRMONGO_PORT_27017_TCP_ADDR未设置。

您有2种方法可以解决此问题:

1)在您的应用程序中定义redismongo主机名。

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

2)在REDIS_PORT_6379_TCP_ADDR文件中定义环境变量MONGO_PORT_27017_TCP_ADDRdocker-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"
    environment:
      - REDIS_PORT_6379_TCP_ADDR:"redis:6379"
      - MONGO_PORT_27017_TCP_ADDR:"mongodb://mongo:27017"

第二种方式可能包含一些错误。我不认为在nodejs中必须如何呈现ULR。