Context Provider应用连接MongoDB失败,寻求问题排查方案
Context Provider无法连接MongoDB的排查与解决
问题根因
从日志中的connect ECONNREFUSED 127.0.0.1:27017可以明确:Context Provider的Node.js应用在尝试连接容器自身的localhost,而非Docker Compose网络中的MongoDB服务。在Docker Compose默认网络环境下,服务之间需通过服务名(此处为mongo-db)互相访问,而非localhost。Orion能正常连接是因为通过-dbhost mongo-db参数指定了正确的主机名,但Context Provider应用未配置对应参数。
解决办法
修改docker-compose.yml中的tutorial服务,添加MongoDB连接相关环境变量,指定MongoDB服务的主机名:
tutorial: image: quay.io/fiware/tutorials.context-provider hostname: context-provider container_name: fiware-tutorial networks: - default expose: - "3000" ports: - "3000:3000" environment: - "DEBUG=tutorial:*" - "PORT=3000" - "CONTEXT_BROKER=http://orion:1026/v2" - "MONGO_HOST=mongo-db" # 新增:指定MongoDB服务名 - "MONGO_PORT=27017" # 可选,默认即为27017 - "OPENWEATHERMAP_KEY_ID=<ADD_YOUR_KEY_ID>" - "TWITTER_CONSUMER_KEY=<ADD_YOUR_CONSUMER_KEY>" - "TWITTER_CONSUMER_SECRET=<ADD_YOUR_CONSUMER_SECRET>"
添加MONGO_HOST=mongo-db后,应用会指向Docker Compose网络中的MongoDB服务,而非容器自身的localhost。重启容器后,Context Provider即可正常连接MongoDB,日志中的ERR_HTTP_HEADERS_SENT等后续异常也会随之消失。
内容的提问来源于stack exchange,提问作者igomisp
相关产品推荐
相关产品推荐

