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
我有一个连接到 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