Ho visto un gruppo di tutorial che sembrano fare la stessa cosa che sto cercando di fare, ma per qualche motivo i miei contenitori Docker escono. Fondamentalmente, sto configurando un web server e alcuni daemon all'interno di un container Docker. Faccio le ultime parti di questo attraverso uno script di bash chiamato run-all.sh
che eseguo tramite CMD nel mio Dockerfile. run-all.sh
assomiglia a questo:Come mantenere il contenitore Docker in esecuzione dopo l'avvio dei servizi?
service supervisor start
service nginx start
E comincio all'interno del mio Dockerfile come segue:
CMD ["sh", "/root/credentialize_and_run.sh"]
posso vedere che i servizi di tutte le start up in modo corretto quando si esegue le cose manualmente (ad esempio salire a l'immagine con -i -t/bin/bash), e tutto sembra funzionare correttamente quando eseguo l'immagine, ma termina quando termina l'avvio dei miei processi. Mi piacerebbe che i processi funzionassero a tempo indeterminato e, per quanto ho capito, il contenitore deve continuare a funzionare affinché ciò accada. Tuttavia, quando corro docker ps -a
, vedo:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
cosa succede? Perché sta uscendo? So che potrei semplicemente mettere un ciclo while alla fine del mio script bash per tenerlo aggiornato, ma qual è il modo giusto per evitare che esca?
stai esponendo le porte dei servizi all'esterno (opzione -p alla finestra mobile)? (ovviamente questo non impedirà loro di uscire) – ribamar