当无法在Docker Compose中连接Express和Redis时

遇到的错误

只要不使用Docker Compose,就可以完成这个任务,但是一旦使用了,就会出现以下错误。

Error: connect ECONNREFUSED 127.0.0.1:6379

太长,没看。

docker-compose.yml和app.js将会是这样的。

version: '3'
services:
  express:
    build: .
    volumes:
      - .:/app
    tty: true
    ports:
      - 3000:3000
    environment:
      - NODE_ENV=development
      - PORT=3000
      - SESSION_SECRET=hogehoge
      - REDIS_HOST=redis_db
      - REDIS_PORT=6379
    depends_on:
      - redis_db

  redis_db:
    image: redis:latest
    ports:
      - 6379:6379
var session = require('express-session');
var RedisStore = require('connect-redis')(session)
var redis = require('redis')

var redisClient = redis.createClient({
  url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`
})

app.use(session({
  secret: process.env.SESSION_SECRET,
  store: new RedisStore({
    client: redisClient,
    prefix: 'sid:',
  }),
}))

糟糕的例子

我在谷歌上搜索到的信息说,这只能在本地主机上运行。

var session = require('express-session');
var RedisStore = require('connect-redis')(session)
var redis = require('redis')

var redisClient = redis.createClient()

app.use(session({
  secret: process.env.SESSION_SECRET,
  store: new RedisStore({
    client: redisClient,
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    prefix: 'sid:',
  }),
}))