redis连接失败

col17t5w  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(369)

我正在构建一个使用node、redis和mongo的应用程序。我完成了开发,我想用docker把它装箱。
这是我的 Dockerfile :

FROM node:13.8.0-alpine3.11
RUN npm install -g pm2
WORKDIR /user/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000

这是我的 docker-compose.yml ```
version: '3'
services:
redis-server:
container_name: scrapr-redis
image: 'redis:6.0-rc1-alpine'
ports:
- '6379:6379'
mongo-db:
container_name: scrapr-mongo
image: mongo
ports:
- '27017:27017'
command: --auth
environment:
- MONGO_INITDB_ROOT_USERNAME=user
- MONGO_INITDB_ROOT_PASSWORD=pass
- MONGO_INITDB_DATABASE=db
app:
container_name: scrapr-node
restart: always
build: .
ports:
- '3000:3000'
- '3001:3001'
links:
- mongo-db
depends_on:
- redis-server
environment:
- DB_USER=user
- DB_PWD=pass
- DB_NAME=db
- REDIS_HOST=redis-server
command: 'node index.mjs'

我可以成功启动服务,但是当node启动时,它会生成以下错误:
错误:redis连接到127.0.0.1:6379失败-连接到127.0.0.1:6379
当我这么做的时候 `docker ps -a` ,我可以看到所有容器都在运行:
![](https://i.stack.imgur.com/cprGH.png)
为什么它不能连接到redis?我错过了什么?
m3eecexj

m3eecexj1#

127.0.0.1 在我看来一点也不对。让我先快速检查一下,你确定你在node应用程序中正确使用了redis\u host env变量吗?我会添加一些控制台日志到您的节点应用程序,以呼应出env变量来检查它们是什么。
其次,尝试使用 docker container exec -it scrapr-node sh 或/bin/bash,如果sh不起作用。
那就跑吧 nslookup scrapr-redis 在shell中,这将为您提供redis容器的ip地址。如果 ping scraper-redis 返回然后你就知道这是你的节点应用程序的问题,而不是docker网络的问题。
您还可以执行redis节点并运行 hostname -I 它应该显示与您在另一个容器中看到的相同的ip地址。
这将帮助您调试问题。
编辑:
请确保使用将环境中的值正确地输入到节点应用程序中 process.env.REDIS_HOST 然后在连接到redis时正确使用该值,例如:

const redisClient = redis.createClient({
  host: process.env.REDIS_HOST,
  port: 6379
});

我不会试图在docker网络上强制127.0.0.1(如果可能的话),它被保留为环回地址。

相关问题