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_ADDR
和MONGO_PORT_27017_TCP_ADDR
未设置。
你有两种方法来解决这个问题:
1)在应用程序中定义redis
和mongo
主机名。
client = redis.createClient({ "host":'redis', "port": "6379" }); mongoose.connect('mongodb://mongo:27017/chichat'});
2)在docker-compose.yml
文件中定义环境variablesREDIS_PORT_6379_TCP_ADDR
和MONGO_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。