我有一个简单的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