我想在Docker Swarm中部署具有MongoDB和Web服务器的堆栈;数据库必须填充初始数据,我发现此有效solution。鉴于Stack服务以随意的顺序启动,我如何确定Web服务器将正确读取初始数据?
可能我需要一些通知系统(Redis?),但是我是MongoDB的新手,所以我正在寻找针对此问题的知名解决方案(我认为这很普遍)。
我强烈建议您检查docker-compose.yml的运行状况检查。您可以将health check
命令更改为特定的MongoDB检查,一旦运行状况检查准备就绪,则只有Web服务器将开始将请求发送到MongoDB容器。
看看示例文件。请根据需要更改健康检查
version: "3.3"
services:
mongo:
image: mongo
ports:
- "27017:27017"
volumes:
- ./data/mongodb/db:/data/db
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo mongo:27017/test --quiet 1
interval: 10s
timeout: 10s
retries: 5
start_period: 40s
webserver:
image: custom_webserver_image:latest
volumes:
- $PWD:/app
links:
- mongodb
ports:
- 8000:8000
depends_on:
- mongo
Ref:-https://docs.docker.com/compose/compose-file/#healthcheck