Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis可用于部署,但它不';t与docker和heroku合作制作_Node.js_Docker_Heroku_Redis_Docker Compose - Fatal编程技术网

Node.js Redis可用于部署,但它不';t与docker和heroku合作制作

Node.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

我正在尝试开发一个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.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的情况下,它工作了,但它不工作。谢谢你的帮助

  • 安装redis

    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);