Jeg foreslår at tilføje et entrypoint-script til din container; i dette entrypoint-script kan du kontrollere, om databasen er blevet initialiseret, og hvis den ikke er det, skal du udføre de nødvendige trin.
Som du bemærkede i dit spørgsmål, bør rækkefølgen, som tjenester/containere startes i, ikke tages for givet, så det er muligt, at din ansøgningscontainer startes før databasebeholderen, så scriptet bør tage højde for det.
Tag et eksempel på det officielle WordPress-billede, som udfører en engangsinitialisering af databasen i dets entrypoint-script. Scriptet forsøger at oprette forbindelse til databasen (og forsøger igen, hvis databasen ikke kan kontaktes (endnu)), og kontrollerer, om initialisering er nødvendig;
Du kan fjerne databeholderen fra din skrivefil og ændre din mongo-tjeneste til at se sådan ud;
Dette skulle skabe et nyt bind, kaldet mongo:
image: mongo:latest
volumes:
- mongodata:/data/db
ports:
- "28001:27017"
command: --smallfiles --rest --auth
mongodata
hvis den ikke findes, eller genbrug den eksisterende diskenhed med det navn. Du kan liste alle volumener ved hjælp af docker volume ls
og fjern en diskenhed med docker volume rm <some-volume>
hvis du ikke længere har brug for det