首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用环境变量连接Node.js和MongoDB容器时出现问题。在Docker Compose

使用环境变量连接Node.js和MongoDB容器时出现问题。在Docker Compose
EN

Stack Overflow用户
提问于 2021-04-03 18:12:10
回答 2查看 43关注 0票数 0

我正在创建一个简单的后端服务。我正在尝试使用环境文件将我的Node.js容器与MongoDB连接。

这是我的docker合成文件

代码语言:javascript
复制
version: '3.7'
services:
  web-admin:
   build:
    context: .
    dockerfile: dockerfile
   image: node:14.16.0-alpine3.10
   container_name: admin-service
   restart: unless-stopped
   env_file: .env
   environment:
    - MONGO_HOSTNAME=productDB
    - MONGO_PORT=27017
    - MONGO_DB=product
   volumes:
    - /home/dd/experiment/adminservice:/app
    - /home/dd/experiment/adminservice/node_modules:/app/node_modules 
   depends_on:
    - productDB 
   networks:
    - admin-network
  productDB:
   image: mongo
   ports: 
    - "27017:27017"
   container_name: productDB
   restart: unless-stopped
   volumes:
    - /productdata:/data/db
   networks:
    - admin-network

volumes:
  productdata:
  node_modules:
networks:
  admin-network:
   driver: bridge

这是我的.env文件

代码语言:javascript
复制
MONGO_DB=product
MONGO_PORT=27017

这是我的index.js文件的代码块。此外,重试逻辑工作正常,没有错误。

代码语言:javascript
复制
const {
MONGO_HOSTNAME,
MONGO_PORT,
MONGO_DB
} = process.env

//db retry logic
retries = 10;
while(retries)
{
        try{
                 mongoose.connect('mongodb://${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}',
                {
                    useNewUrlParser: true ,
                    keepAlive : true ,
                }).then( function()
                {
                    console.log('mongoDB is connected')
                })
                break;
            }
            catch(err)
            {
                console.log(err)    
                retries -= 1;       
                console.log('retries left: ${retries}');
                 
            }
}

现在,当我尝试使用docker-compose up -d命令启动docker-compose时,我的MongoDB容器设置得很好,但是Node.js容器每时每刻都在重新启动。因此,我知道有一些错误正在停止容器,但我无法跟踪错误。

请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2021-04-03 18:20:22

  1. 这不是你在nodejs中使用env var的方式。你需要做

const MONGO_HOSTNAME = process.env.MONGO_HOSTNAME优先。

  1. 这不是你用promises重试逻辑的方式。此外,对于promises,您需要使用.error()来捕获错误,而不是使用try/ catch

  1. "docker logs container id“将帮助您查看错误,因此您可能会找出问题所在。
票数 0
EN

Stack Overflow用户

发布于 2021-04-05 00:30:40

MONGO_HOSTNAME -如果您使用windows主机,请尝试将其指定为host.docker.internal而不是localhost

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66929923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档