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

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

redisdb错误:{错误:Redis连接到本地: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但仍然失败。

您尝试连接到本地主机而不是连接到redis或mongo容器。 发生这种情况的原因是环境variablesREDIS_PORT_6379_TCP_ADDRMONGO_PORT_27017_TCP_ADDR未设置。

你有两种方法来解决这个问题:

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

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

2)在docker-compose.yml文件中定义环境variablesREDIS_PORT_6379_TCP_ADDRMONGO_PORT_27017_TCP_ADDR

 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。