Sto cercando di distribuire una serie di applicazioni connesse in esecuzione in più contenitori collegati che include un database mongo che è necessario per:Come seminare un database mongo usando la finestra mobile-compose?
- essere distribuiti contenente alcuni dati seme;
- consente agli utenti di aggiungere ulteriori dati.
Idealmente i dati verranno mantenuti anche in un contenitore di volume di dati collegato.
posso ottenere i dati nel mongo
contenitore utilizzando un'istanza mongo
base che non montare tutti i volumi (immagine dockerhub: psychemedia/mongo_nomount
- questo è essenzialmente la base Mongo Dockerfile senza la dichiarazione VOLUME /data/db
) e una configurazione Dockerfile
lungo le linee di:
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
dove ./testdata.csv
è nella stessa directory (./mongo-with-data
) come Dockerfile.
mio file di configurazione finestra mobile-composizione include quanto segue:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
Ogni volta che provo a montare un volume sembra come se i dati testa di serie originale - che è memorizzato in /data/db
- viene eliminato. Immagino che quando un volume viene montato su /data/db
sostituisce ciò che è attualmente presente.
Detto questo, il docker userguide suggerisce che: I volumi vengono inizializzati quando viene creato un contenitore. Se l'immagine di base del contenitore contiene dati nel punto di montaggio specificato, i dati esistenti vengono copiati nel nuovo volume al momento dell'inizializzazione del volume? Quindi mi aspettavo che i dati persistessero se ho inserito il comando VOLUME dopo il comando di seeding RUN
?
Quindi cosa sto sbagliando?
La lunga vista è che voglio automatizzare la build di diversi contenitori collegati, e quindi distribuire un file YAML Vagrantfile
/finestra mobile-composizione che il fuoco su un gruppo di app collegate, che include un mongo
di database pre-teste di serie con un contenitore di dati persistenti (parzialmente precompilato).
Credo che quello che voglio fare nella fase di costruzione è il Monte del db contenitore su un nuovo contenitore del volume di dati in modo che i dati nella directory del contenitore di database vengano inseriti nel volume di dati, anziché montare il contenitore del volume di dati nel contenitore del db, che sovrascrive i dati che ho appena importato. – psychemedia
Dopo aver stabilito un contenitore del volume di dati con i dati iniziali, posso distruggere il contenitore del database originale e quindi collegare semplicemente un contenitore mongodb semplice al contenitore del volume di dati per l'utilizzo da parte dell'utente finale. Il cuore della domanda originale ora è questo: qual è il modo più semplice per creare e popolare un contenitore di volumi di dati a cui un contenitore mongod possa connettersi? – psychemedia
Con 'Rails' utilizzo' docker-compose eseguire container_name rake db: seed' –