sql >> Databáze >  >> NoSQL >> MongoDB

Jak jednou spustit příkaz v Docker compose

Navrhuji přidat do svého kontejneru skript vstupního bodu; v tomto vstupním skriptu můžete zkontrolovat, zda byla databáze inicializována, a pokud ne, provést požadované kroky.

Jak jste si všimli ve své otázce, pořadí, ve kterém jsou služby / kontejnery spouštěny, by nemělo být považováno za samozřejmé, takže je možné, že kontejner vaší aplikace bude spuštěn před kontejner databáze, takže skript by to měl vzít v úvahu.

Jako příklad se podívejte na oficiální obrázek WordPressu, který provádí jednorázovou inicializaci databáze ve vstupním skriptu. Skript se pokusí připojit k databázi (a pokusí se znovu, pokud databázi nelze (zatím) kontaktovat) a zkontroluje, zda je potřeba inicializace; https://L146 /docker-library/wordpress/blob/df190dc9c5752fd09317d836bd2bdcd09ee379a5/apache/docker-entrypoint.sh#L146-L171

POZNÁMKA

Všiml jsem si, že jste vytvořili „kontejner pouze pro data“, ke kterému chcete připojit svůj svazek. Od dockeru 1.9 má docker správu svazků, včetně pojmenování svazků. Z tohoto důvodu již nemusíte používat kontejnery „pouze data“.

Kontejner pouze pro data můžete odstranit ze souboru pro vytváření zpráv a změnit službu mongo tak, aby vypadala nějak takto;

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

Tím by se měl vytvořit nový svazek s názvem mongodata pokud neexistuje, nebo znovu použijte existující svazek s tímto názvem. Všechny svazky můžete vypsat pomocí docker volume ls a odeberte svazek pomocí docker volume rm <some-volume> pokud jej již nepotřebujete



  1. Scrapy a procházení webu pomocí Scrapy a MongoDB

  2. Nelze skenovat pomocí šablony redis

  3. Spring Data MongoDB:agregační rámec – řazení s vnořenou vlastností vyvolá neplatný odkaz

  4. vytvářet a aktualizovat více dokumentů MongoDB v jednom volání