Node.js Redis可用于部署,但它不';t与docker和heroku合作制作
我正在尝试开发一个express api。它可以在本地机器上正常工作。我使用的是docker,但在docker和heroku redis的生产中无法使用 DockerfileNode.js Redis可用于部署,但它不';t与docker和heroku合作制作,node.js,docker,heroku,redis,docker-compose,Node.js,Docker,Heroku,Redis,Docker Compose,我正在尝试开发一个express api。它可以在本地机器上正常工作。我使用的是docker,但在docker和heroku redis的生产中无法使用 Dockerfile FROM node:latest WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 5000 CMD ["npm","start"] docker.compose.ym
FROM node:latest
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5000
CMD ["npm","start"]
docker.compose.yml文件
version: '3'
services:
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'
redis:
container_name: redis
image: redis
app:
container_name: password-manager-docker
image: app
restart: always
build: .
ports:
- '80:5000'
links:
- mongo
- redis
environment:
MONGODB_URI: ${MONGODB_URI}
REDIS_URL: ${REDIS_URL}
clientID: ${clientID}
clientSecret : ${clientSecret}
PORT: ${PORT}
REDIS_HOST: ${REDIS_HOST}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_EXPIRE: ${JWT_EXPIRE}
REFRESH_TOKEN: ${REFRESH_TOKEN}
JWT_REFRESH_SECRET_KEY: ${JWT_REFRESH_SECRET_KEY}
JWT_REFRESH_EXPIRE: ${JWT_REFRESH_EXPIRE}
JWT_COOKIE: ${JWT_COOKIE}
SMTP_HOST: ${SMTP_HOST}
SMTP_PORT: ${SMTP_PORT}
SMTP_USER: ${SMTP_USER}
SMTP_PASS: ${SMTP_PASS}
redis文件
const asyncRedis = require('async-redis');
//process.env.REDIS_HOST's value is redis
const redisClient = asyncRedis.createClient({port:6379,host:process.env.REDIS_HOST || "127.0.0.1"});
redisClient.on("connect",() => {
console.log(`Redis: ${host}:${port}`);
})
redisClient.on('error', function(err) {
// eslint-disable-next-line no-console
console.log(`[Redis] Error ${err}`);
});
heroku上的错误是“[Redis]错误:Redis连接到127.0.0.1:6379失败-连接到127.0.0.1:6379”。在heroku没有docker的情况下,它工作了,但它不工作。谢谢你的帮助
sudo apt get安装redis服务器
sudo服务redis服务器状态
如果您收到消息“redis server正在运行”,则它将解决环境变量“redis\u HOST”未设置-您的问题中已经有了答案,错误是:
EconRefuse127.0.0.1:6379
主机地址来自您的if语句:{port:6379,host:process.env.REDIS_host | |“127.0.0.1”}
如果未设置process.env.REDIS_HOST,则使用127.0.0.1作为主机地址。运行docker compose时,您必须解析配置文件或通过
-e KEY=VAL
对其进行设置,或者编辑行REDIS_HOST:${REDIS_HOST}
并用docker-compose.yml文件中的服务名(REDIS)替换${REDIS_HOST}
,或者…,有很多可能性。如果您想知道redis容器的真实ip,只需使用docker inspect-f'{{range.NetworkSettings.Networks}{{IPAddress}{{end}}}'
检查一下就可以了。我将heroku中的redis插件从heroku redis更改为redis,并更改了这一行
const redisClient = asyncRedis.createClient({port:6379,host:process.env.REDIS_HOST || "127.0.0.1"});
到
检查redis服务器是否正在运行,或者notApi是否在本地运行,以及redis服务器是否正在运行。是否设置了
$redis\u HOST
环境变量?在这个Compose设置的上下文中,将其设置为docker Compose.yml文件中的固定容器名称是否有效?是的,我将其设置为REDIS我使用的是windows机器,而且我的问题是生产不是本地谢谢你的回答,但我已经在heroku中设置了REDIS_HOST=REDIS In.envI set。[Redis]错误:Redis与Redis:6379的连接失败-getaddrinfo eNotFind Redis如果可用,您能提供帮助吗?heroku是您的产品环境吗?!不确定如何工作,docker compose和.env用于本地开发,而heroku所能做的就是将容器图像推送到它们()。docker-compose.yml、Dockerfile和.env文件的所有信息似乎都是无用的,你没有将redis和mongo容器推送到heroku,你使用他们的redis/mongo容器,文档中也没有太多关于启动容器的内容(只看了一眼)。那么,我到底应该怎么做呢?有什么建议吗?
const redisClient = asyncRedis.createClient(process.env.REDISTOGO_URL);