使用Docker部署Cygnus与MongoDB时遭遇认证失败问题求助
解决Cygnus与MongoDB Docker部署时的认证失败问题
咱们先来梳理下你遇到的认证失败问题,结合你给出的docker-compose片段,我整理了几个关键排查方向和解决步骤:
1. 确认MongoDB侧已正确创建Cygnus用户
你配置的CYGNUS_MONGO_USER=cygnus和CYGNUS_MONGO_PASS=f10t_Mongo,需要确保这些凭据在MongoDB中已经被正确创建,并且拥有对应数据库的权限:
- 先进入MongoDB容器:
docker exec -it mongodb mongo - 切换到默认的认证数据库(一般是
admin),创建用户并赋予权限:use admin db.createUser({ user: "cygnus", pwd: "f10t_Mongo", roles: [ { role: "readWrite", db: "cygnusdb" }, // Cygnus默认存储数据的数据库 { role: "dbAdmin", db: "cygnusdb" } ] })
提示:如果你的Cygnus配置了自定义数据库名称,记得把上面的
cygnusdb替换成你实际使用的库名。
2. 确保MongoDB容器开启了认证模式
从你贴的mongodb配置片段来看,可能遗漏了认证启动参数。MongoDB默认不开启认证,这会导致配置了用户名密码的Cygnus连接失败,你需要在mongodb的docker-compose配置中添加--auth启动命令:
mongodb: image: mongo:3.4.7 hostname: mongodb container_name: mongodb command: mongod --auth # 开启认证模式 ports: - "27017:27017" volumes: - ./mongodb-data:/data/db # 挂载数据卷避免数据丢失
3. 检查Cygnus的agent.conf配置一致性
你挂载了自定义的agent.conf文件,要确保里面的Mongo Sink参数和环境变量完全匹配,尤其是认证相关的配置:
# 确保这些参数引用了你的环境变量 mongo-sink.sink.mongo_hosts = ${CYGNUS_MONGO_HOSTS} mongo-sink.sink.mongo_username = ${CYGNUS_MONGO_USER} mongo-sink.sink.mongo_password = ${CYGNUS_MONGO_PASS} # 如果你的Cygnus用户是在admin库创建的,必须显式指定认证数据库 mongo-sink.sink.mongo_auth_db = admin
注意:如果你的用户是在目标数据库(比如cygnusdb)创建的,可以不用指定
mongo_auth_db,但推荐在admin库管理用户。
4. 验证容器间的网络连通性
虽然你用了external_links,但还是要确认Cygnus容器能正常访问MongoDB容器:
# 在Cygnus容器内ping MongoDB容器,看是否能连通 docker exec -it cygnus ping mongodb
如果ping不通,说明两个容器不在同一个网络环境中,需要将Cygnus加入MongoDB所在的Docker网络。
5. 通过日志定位具体错误
如果上面的步骤都没问题,就去看日志找细节:
- 查看Cygnus的日志,获取认证失败的具体信息:
docker logs cygnus - 查看MongoDB的日志,看认证请求的错误原因(比如密码错误、权限不足等):
docker logs mongodb
内容的提问来源于stack exchange,提问作者Gabriela Silva
相关产品推荐
相关产品推荐

