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

Docker compose - Check if mongodb port is available and only then start NodeJS container

我有一个连接到 mongodb 的简单 NodeJS 应用程序,它们都是使用 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-app 容器之前检查 mongo 端口是否可用以抑制 nodejs-app 的连接错误?

好吧,在 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