docker-compose 后无法向我的 express API w/redis 发送请求

Cannot send requests to my express API w/ redis after docker-compose

我一直在用 Node.js/Express + redis 做一个小项目,有基本的前端 w/o 任何框架(完整代码可以看 here)。我一直在使用 Postman 测试我的 API(因为我的前端目前无法正常工作),它的效果非常好。

所以,在项目中实现 redis 之后,我尝试将它添加到我的 docker-compose.yml 文件中,这里是它和一些其他文件:

docker-compose.yml

version: '3.8'
services:
  redis:
    container_name: redis-db
    image: redis
    networks:
      - webnet

  backend:
    container_name: api
    build: ./backend
    restart: always
    ports:
      - '8080:8080'
    networks:
      - webnet
    depends_on:
      - redis

  frontend:
    container_name: frontend
    build: ./frontend
    restart: always
    ports:
      - '5000:5000'
    networks:
      - webnet
    depends_on:
      - backend
networks:
  webnet:

config.yml

server:
  host: localhost
  port: 8080
app:
  # '-1' for turning expiry off; otherwise, should be at least '1' (minute)
  timeToLive: -1
db:
  type: redis # ['in-memory', 'redis']
  redis:
    # select 'redis' if using docker-compose
    host: redis # ['localhost', 'redis']
    port: 6379

redis.js

import Redis from 'redis';
import config from 'config';
import AppError from '../utils/appError.js';
import { StatusCodes } from 'http-status-codes';
import { promisify } from 'util';

export const redisClient = Redis.createClient({
  host: config.get('db.redis.host'),
  port: config.get('db.redis.port'),
});

redisClient.on('error', function (err) {
  throw new AppError(err, StatusCodes.INTERNAL_SERVER_ERROR);
});

redisClient.on('connect', () => {
  console.log(' connected redis successfully ');
});

但是,不幸的是,在 docker-compose 之后,我无法再发出 Postman 请求。 Redis 连接没有任何问题,在控制台中似乎一切正常,我什至可以访问我的前端页面,但我无法再向我的后端发出请求。

我的前端是 运行 localhost:5000,后端应该是 运行 localhost:8080,redis 似乎是 运行 [=53] =].

我已经尽力寻找答案,但是有数百个关于如何使用 docker-compose 将 redis 连接到您的 express 项目的问题,但没有关于连接 redis 后访问后端的问题的问题.

EDIT_1:这是邮递员说的:

POST http://127.0.0.1:8080/api/v1/queue
Error: socket hang up
Request Headers
Content-Type: application/json
User-Agent: PostmanRuntime/7.28.3
Accept: */*
Postman-Token: a61d8b9c-a2f5-4fe4-92e1-921a5680bb85
Host: 127.0.0.1:8080
Accept-Encoding: gzip, deflate, br

这里是dockerps输出:

f7f6fbe12863   project1_frontend   "docker-entrypoint.s…"   3 minutes ago   Up 2 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   frontend
9802680a1a3d   project1_backend    "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   api     
66fde12be888   redis               "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis-db

这是 docker-compose up 后我的控制台日志:

api         |
api         | > queue-resolution-api@0.1.0 start /app
api         | > nodemon server.js
api         |
api         | [nodemon] 2.0.12
api         | [nodemon] to restart at any time, enter `rs`
api         | [nodemon] watching path(s): *.*
api         | [nodemon] watching extensions: js
api         | [nodemon] starting `node server.js`
api         | NODE_ENV: development
api         | Listening on port 8080...
api         |  connected redis successfully 
redis-db    | 1:C 16 Aug 2021 14:35:18.728 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis-db    | 1:C 16 Aug 2021 14:35:18.728 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis-db    | 1:C 16 Aug 2021 14:35:18.728 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis-db    | 1:M 16 Aug 2021 14:35:18.728 * monotonic clock: POSIX clock_gettime
redis-db    | 1:M 16 Aug 2021 14:35:18.729 * Running mode=standalone, port=6379.
redis-db    | 1:M 16 Aug 2021 14:35:18.729 # Server initialized
redis-db    | 1:M 16 Aug 2021 14:35:18.729 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis-db    | 1:M 16 Aug 2021 14:35:18.729 * Ready to accept connections
redis-db    | 1:M 16 Aug 2021 14:35:20.587 * DB saved on disk
frontend    | 
frontend    | > frontend@1.0.0 start /app
frontend    | > nodemon server.js
frontend    |
frontend    | [nodemon] 2.0.12
frontend    | [nodemon] to restart at any time, enter `rs`
frontend    | [nodemon] watching path(s): *.*
frontend    | [nodemon] watching extensions: js,mjs,json
frontend    | [nodemon] starting `node server.js`
frontend    | Listening on port 5000...

我找到答案了。在我的 server.js 文件中,我一直在强制应用程序在 host = localhost 上侦听,删除主机部分后一切都开始工作了。

app.listen(port, host, () => {
  console.log('NODE_ENV: ' + config.util.getEnv('NODE_ENV'));
  console.log(`Listening on port ${port}...`);
});