sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan kører du en kommando én gang i Docker compose

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;

  mongo:
    image: mongo:latest
    volumes:
      - mongodata:/data/db
    ports:
      - "28001:27017"
    command: --smallfiles --rest --auth

Dette skulle skabe et nyt bind, kaldet 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



  1. MongoDB:forbinder med ASP.NET MVC-applikation

  2. Find et dokument med ObjectID i mongoDB

  3. Hvordan undgår man at to samtidige API-anmodninger bryder logikken bag dokumentvalidering?

  4. Brug mere end ét skema pr. samling på mongodb