Il problema qui è il tuo approccio. Docker non ha un sistema init come sei abituato sui sistemi tradizionali. Quello che fa la finestra mobile è sostituire PID 1 con il processo specificato in CMD
o ENTRYPOINT
Comandi Dockerfile. Per ora, ignora ENTRYPOINT
, perché sostituisce quello che è il tuo CMD
viene eseguito con (normalmente, è /bin/sh -c
). Devi indicare a Docker di avviare il tuo servizio mongod nel tuo Dockerfile con il CMD
comando, come:
CMD usr/bin/mongod
E quando esegui il tuo container, mongod sarà il tuo PID 1. Ora, probabilmente ti starai chiedendo a questo punto "Ma che dire del mio server SSH?" e la risposta è:non eseguire un server SSH sui contenitori docker. Ci ci sono alcuni casi d'uso in cui l'esecuzione di un server SSH va bene, ma quasi tutti i motivi "normali" (debug, C&C, ecc.) sono annullati con la "migliore pratica" per ottenere una shell sul tuo contenitore:
docker exec -it myContainer /bin/bash
Questo ti farà cadere in una shell sul tuo contenitore in esecuzione. Il consiglio qui per la gestione della configurazione e delle modifiche nel contenitore della finestra mobile è di utilizzare qualcosa come Ansible. Tuttavia, ricorda che i contenitori Docker sono temporanei e non dovresti riavviare i servizi e modificare lo stato di configurazione su di essi. Se hai bisogno di una modifica alla configurazione, cambia il Dockerfile o i dati di configurazione, quindi avvia un nuovo contenitore. Buona fortuna! Qui
è un po' più di informazioni su Dockerizing MongoDB, ma tieni presente che il metodo qui descritto altera il ENTRYPOINT
nel Dockerfile, che è un po' più complicato e richiede una migliore comprensione di cosa sta succedendo in Dockerfiles.