sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man kör ett kommando en gång i Docker compose

Jag föreslår att du lägger till ett entrypoint-script till din behållare; i detta entrypoint-script kan du kontrollera om databasen har initierats, och om den inte är det, utför de nödvändiga stegen.

Som du märkte i din fråga bör ordningen i vilken tjänster/behållare startas inte tas för given, så det är möjligt att din applikationsbehållare startas före databasbehållaren, så skriptet bör ta hänsyn till det.

Som ett exempel, ta en titt på den officiella WordPress-bilden, som utför en engångsinitiering av databasen i dess entrypoint-script. Skriptet försöker ansluta till databasen (och försöker igen om databasen inte kan kontaktas (ännu)), och kontrollerar om initiering behövs; https://Lgithub.com /docker-library/wordpress/blob/df190dc9c5752fd09317d836bd2bdcd09ee379a5/apache/docker-entrypoint.sh#L146-L171

OBS

Jag märker att du skapade en "endast databehållare" för att koppla din volym till. Sedan docker 1.9 har docker volymhantering, inklusive namngivning av volymer. På grund av detta behöver du inte längre använda "endast data"-behållare.

Du kan ta bort behållaren för endast data från din skrivfil och ändra din mongo-tjänst så att den ser ut ungefär så här;

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

Detta bör skapa en ny volym, med namnet mongodata om den inte finns, eller återanvänd den befintliga volymen med det namnet. Du kan lista alla volymer med docker volume ls och ta bort en volym med docker volume rm <some-volume> om du inte längre behöver det



  1. Hur man installerar Mongodb på Apple M1-chip

  2. F# Multiple Attributes CLIMutable DataContract

  3. Är redis en hållbar databutik?

  4. Hur man multipel push till kapslad array