我建立了一个快速服务器并链接到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
但仍然失败。
答案 0 :(得分:1)
您尝试连接到localhost而不是连接到redis或mongo容器。这是因为环境变量REDIS_PORT_6379_TCP_ADDR
和MONGO_PORT_27017_TCP_ADDR
未设置。
您有2种方法可以解决此问题:
1)在您的应用程序中定义redis
和mongo
主机名。
client = redis.createClient({ "host":'redis', "port": "6379" });
mongoose.connect('mongodb://mongo:27017/chichat'});
2)在REDIS_PORT_6379_TCP_ADDR
文件中定义环境变量MONGO_PORT_27017_TCP_ADDR
和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"
environment:
- REDIS_PORT_6379_TCP_ADDR:"redis:6379"
- MONGO_PORT_27017_TCP_ADDR:"mongodb://mongo:27017"
第二种方式可能包含一些错误。我不认为在nodejs中必须如何呈现ULR。