Docker 容器之间的连接不可能

问题描述 投票:0回答:1

我有一个 redis nodejs 设置。只要 nodejs 在 dockercontainer 中,我就无法在两个服务之间进行连接。

当我直接在服务器上启动 nodejs 服务或从其他服务器连接到 rediscli 时,它可以正常工作。我试图创建一个 dockernetwork 但没有改变。我还尝试了不同的命名设置。我还尝试在 redisclient 上激活 legacymode。

我必须以某种方式激活 docker 中的互连吗?

错误信息:

url-shortener_1  | Server running: 1339
url-shortener_1  | node:internal/process/promises:289
url-shortener_1  |             triggerUncaughtException(err, true /* fromPromise */);
url-shortener_1  |             ^
url-shortener_1  |
url-shortener_1  | Error: connect ECONNREFUSED 127.0.0.1:6379
url-shortener_1  |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)
url-shortener_1  | Emitted 'error' event on Commander instance at:
url-shortener_1  |     at RedisSocket.<anonymous> (/app/node_modules/@redis/client/dist/lib/client/index.js:390:14)
url-shortener_1  |     at RedisSocket.emit (node:events:512:28)
url-shortener_1  |     at RedisSocket._RedisSocket_connect (/app/node_modules/@redis/client/dist/lib/client/socket.js:167:18)
url-shortener_1  |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
url-shortener_1  |   errno: -111,
url-shortener_1  |   code: 'ECONNREFUSED',
url-shortener_1  |   syscall: 'connect',
url-shortener_1  |   address: '127.0.0.1',
url-shortener_1  |   port: 6379
url-shortener_1  | }

docker-compose.yml

version: '3'

services:
  url-shortener:
    build: .
    ports:
      - 1339:1339
    depends_on:
      - redis
    networks:
      - ubuntu-host01
    links:
      - redis
  redis:
    image: redis:latest
    ports:
      - 6379:6379
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    networks:
      - ubuntu-host01

networks:
  ubuntu-host01:
    external: true

码头网络 ls

NETWORK ID     NAME               DRIVER    SCOPE
38a53faf180b   ubuntu-host01      bridge    local

redis.conf

requirepass PASSWORD
#aclfile /etc/redis/users.acl

index.js

const express = require('express')
const redis = require('redis')
const google = require("./google.js");

const port = 1339


const rdb = redis.createClient({
  legacyMode: true,
  host: 'redis', # also tried 127.0.0.1 or localhost
  port: '6379',
  password: 'PASSWORD'
})

rdb.on('connect', () => {
  console.log('Connected to Redis')
})

rdb.connect();
const app = express()

那些是 package.json 中的依赖项

  "dependencies": {
    "express": "^4.18.2",
    "googleapis": "^111.0.0",
    "redis": "^4.6.4"
  }
node.js docker docker-compose redis
1个回答
0
投票

换你的redis客户端。用这个

rdb = redis.createClient({
socket: {
    host: 'redis',
    port: '6379',
    password: 'PASSWORD',
    legacyMode: true,
}

})

更多信息在这里redis客户端

附言用户 --build 用于在本地重新创建容器。有时 compose 使用带有旧文件的旧容器。

© www.soinside.com 2019 - 2024. All rights reserved.