You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下NextJS+NextAuth对接Keycloak认证报错求助

Docker环境下NextAuth对接Keycloak出现ECONNREFUSED错误

我在Docker环境中使用NextAuth实现NextJS应用与Keycloak的认证对接时,持续出现以下错误:

frontend-1  | [next-auth][error][SIGNIN_OAUTH_ERROR] 
frontend-1  | https://next-auth.js.org/errors#signin_oauth_error connect ECONNREFUSED 127.0.0.1:443 {
frontend-1  |   error: {
frontend-1  |     message: 'connect ECONNREFUSED 127.0.0.1:443',
frontend-1  |     stack: 'Error: connect ECONNREFUSED 127.0.0.1:443\n' +
frontend-1  |       '    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)',
frontend-1  |     name: 'Error'
frontend-1  |   },
frontend-1  |   providerId: 'keycloak',
frontend-1  |   message: 'connect ECONNREFUSED 127.0.0.1:443'
frontend-1  | }

该配置在本地非Docker环境下可正常运行,认证能成功跳转到Keycloak登录页面,仅Docker部署时出现此问题。

当前docker-compose.yml配置

version: "3.9"

services:
  traefik:
    image: docker.io/traefik
    command:
      - --api.insecure=true
      - --providers.docker
      - --entrypoints.web.address=:80
      - --entrypoints.web-secure.address=:443
    ports:
      - "127.0.0.1:8080:8080"
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  keycloak:
    image: quay.io/keycloak/keycloak:20.0.3
    restart: always
    command:
      - start
      - --import-realm
    environment:
      KC_PROXY_ADDRESS_FORWARDING: "true"
      KC_HOSTNAME_STRICT: "false"
      KC_HOSTNAME: auth.example.com
      KC_PROXY: edge
      KC_HTTP_ENABLED: "true"
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres:5432/db?ssl=allow
      KC_DB_USERNAME: postgres
      KC_DB_PASSWORD: postgres
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
    labels:
      - "traefik.http.routers.keycloak.rule=Host(`auth.example.com`)"
      - "traefik.http.routers.cloud-network-keycloak.rule=Host(`auth.example.com`)"
      - "traefik.http.routers.cloud-network-keycloak.tls=true"
      - "traefik.http.services.cloud-network-keycloak.loadbalancer.server.port=8080"
    volumes:
      - ./realm-export.json:/opt/keycloak/data/import/realm.json

  frontend:
    image: ericus20/et-transit-frontend
    build:
      context: ./frontend
      target: RUNNER
    volumes:
      - .:/app
      - /app/node_modules
    command: yarn --cwd frontend dev
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: development
      NEXTAUTH_URL: http://localhost:3000
      NEXTAUTH_URL_INTERNAL: http://frontend:3000
      KEYCLOAK_ISSUER: https://auth.example.com/realms/realm-name

  postgres:
    image: docker.io/postgres:alpine
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: db

已尝试的配置调整

我也曾尝试将KEYCLOAK_ISSUER改为:

KEYCLOAK_ISSUER: https://keycloak:8080/realms/realm-name

我使用的是NextJS 13版本,非常感谢您的帮助,如果能提供可用示例将不胜感激。


内容的提问来源于stack exchange,提问作者Knight Rider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:45:07