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