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

配置带认证的Fiware IoT Agent JSON连接MongoDB时认证失败求助

Fiware IoT Agent JSON 连接MongoDB认证失败问题排查

问题描述

尝试通过docker-compose配置带认证的Fiware IoT Agent JSON与MongoDB连接,始终收到认证失败错误。已在IoT Agent中配置IOTA_MONGO_USER和IOTA_MONGO_PASSWORD环境变量,对应MongoDB的根用户名和密码。

docker-compose配置

iot-agent:
    image: fiware/iotagent-json:latest
    hostname: iot-agent
    container_name: fiware-iot-agent
    depends_on:
        - mongo-db
    networks:
        - fiware
    ports:
        - "4041:4041" 
        - "7896:7896"
    environment:
        - IOTA_MONGO_HOST=mongo-db
        - IOTA_MONGO_PORT=${MONGO_DB_PORT}
        - IOTA_MONGO_USER=${MONGO_USER}
        - IOTA_MONGO_PASSWORD=${MONGO_PWD}
        - IOTA_MONGO_DB=iotagentul
mongo-db:
    image: mongo:${MONGO_DB_VERSION}
    hostname: mongo-db
    container_name: db-mongo
    expose:
        - "${MONGO_DB_PORT}"
    ports:
        - "${MONGO_DB_PORT}:${MONGO_DB_PORT}" # localhost:27017
    networks:
        - fiware
    volumes:
        -  ./volumes/mongo-db/db:/data/db
    environment:
        - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
        - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PWD}

错误日志

subsrv=n/a | msg=尝试连接MongoDB实例,URL为"mongodb://mongo-db:27017/iotagentul",选项为{"auth":{"user":"","password":""}}。第1次尝试 | comp=IoTAgent
(node:1) [MONGODB DRIVER] 警告:当前服务器发现和监控引擎已过时,将在未来版本中移除。要使用新的服务器发现和监控引擎,请向MongoClient构造函数传递选项 { useUnifiedTopology: true }。
(使用node --trace-warnings ...显示警告创建位置)
(node:1) [MONGODB DRIVER] 警告:未指定saslprep库,密码将不会被清理

time=2023-08-14T21:12:11.543Z | lvl=ERROR | corr=9ad5f04f-8b95-4292-837e-54c57de0461d | trans=9ad5f04f-8b95-4292-837e-54c57de0461d | op=IoTAgentNGSI.DbConn | from=n/a | srv=n/a | subsrv=n/a | msg=MONGODB-001: 连接MongoDB出错:MongoNetworkError: 首次连接服务器[mongo-db:27017]失败 [MongoError: 认证失败。
at Connection.messageHandler (/opt/iotagent-json/node_modules/mongodb/lib/core/connection/connection.js:364:19)
at Connection.emit (node:events:513:28)
at Connection.emit (node:domain:552:15)
at processMessage (/opt/iotagent-json/node_modules/mongodb/lib/core/connection/connection.js:456:10)
at Socket. (/opt/iotagent-json/node_modules/mongodb/lib/core/connection/connection.js:625:15)
at Socket.emit (node:events:513:28)
at Socket.emit (node:domain:552:15)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
ok: 0,
code: 18,
codeName: 'AuthenticationFailed'
}]

排查与解决步骤

1. 验证环境变量传递

从错误日志{"auth":{"user":"","password":""}}可知,IoT Agent未正确读取到用户名和密码环境变量:

  • 检查当前目录是否存在.env文件,且文件内变量配置正确,示例:
    MONGO_USER=root
    MONGO_PWD=你的强密码
    MONGO_DB_PORT=27017
    MONGO_DB_VERSION=6.0
    
  • 进入IoT Agent容器验证环境变量是否加载:
    docker exec -it fiware-iot-agent env | grep IOTA_MONGO
    
    若输出为空或无对应值,需确保docker-compose正确读取.env文件(默认读取当前目录,否则需通过--env-file参数指定路径)。

2. 修复MongoDB认证数据库配置

MongoDB的MONGO_INITDB_ROOT_USERNAME默认创建在admin数据库中,而IoT Agent默认使用连接目标数据库(iotagentul)进行认证,导致权限验证失败。需为IoT Agent添加认证数据库指定:
在iot-agent的environment中新增变量:

- IOTA_MONGO_AUTH_SOURCE=admin

3. 重置MongoDB数据卷(若之前未启用认证启动过)

如果之前MongoDB未配置认证就已启动,数据卷中会残留无认证的数据库配置,需清理后重新启动:

docker-compose down -v
docker-compose up -d

4. 验证连接状态

启动后查看IoT Agent日志,确认连接成功:

docker logs fiware-iot-agent

若出现类似Connected to MongoDB instance的日志,说明连接正常。

可选:解决MongoDB驱动警告

添加环境变量解决驱动版本警告:

- IOTA_MONGO_OPTIONS='{"useUnifiedTopology": true}'

内容的提问来源于stack exchange,提问作者Nuno Rolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:54:53