Docker compose-检查mongodb端口是否可用,然后启动NodeJS容器



我有一个简单的NodeJS应用程序,它连接到mongodb,所有这些都是使用docker compose启动的。问题是,如果mongo还没有启动-NodeJS应用程序抛出一个错误,它无法连接到mongodb:

nodejs-app  | Server running...
nodejs-app  | MongoNetworkError: failed to connect to server [mongo:27017] on first connect [Error: connect ECONNREFUSED 192.168.192.2:27017

当我手动重新启动nodejs应用程序时,它成功连接,因为mongo已经初始化:

nodejs-app  | Server running...
nodejs-app  | MongoDB Connected

我的docker撰写文件:

version: '3.7' 
services: 
  mongo:
    container_name: mongo
    restart: always
    image: mongo:4.2.0 
    volumes:
      - ./data:/data/db
    ports: 
      - '27017:27017'   
    networks:
      - nodejs-mongo
  
  nodejs-app: 
    container_name: nodejs-app
    restart: always
    build: test-files 
    ports: 
      - '3000:3000'
    environment:
      - MONGO_PORT=27017 
    depends_on:
      - mongo
    networks:
      - nodejs-mongo
networks:
  nodejs-mongo:

我的问题是-如何在启动nodejs应用程序容器之前检查mongo端口可用,以抑制nodejs程序的连接错误?

好吧,在dockerfile中已经这样做了,使用docker compose-wait:

## Add the wait script to the image
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.8.0/wait /wait
RUN chmod +x /wait
## Launch the wait tool and then your application
CMD /wait && node index.js
COPY . /usr/src/app

相关内容

最新更新