Come mantenere un ciclo infinito in esecuzione per non chiudere un contenitore nel docker

Voglio mantenere un contenitore docker in esecuzione anche dopo l'esecuzione del command di esecuzione (i container escono immediatamente dopo l' docker run.. conosco il command:

  while :;do sleep 300 done 

durante l' docker run lo farà funzionare, ma come faccio a modificare il Dockerfile stesso per mantenerlo in esecuzione?

Puoi farlo inserendo i comandi da eseguire in uno script e impostando lo script per essere il command che Docker esegue quando inizia un contenitore:

 FROM sixeyed/ubuntu-with-utils RUN echo 'ping localhost &' > /bootstrap.sh RUN echo 'sleep infinity' >> /bootstrap.sh RUN chmod +x /bootstrap.sh CMD /bootstrap.sh 

Quando si crea un'image da questo file Docker e si esegue un contenitore dall'image, inizia a ping in background e sleep in primo piano, in modo da poter demodificare il contenitore con docker run -d e continuerà a funzionare.

Questo non è ideale però – Docker controlla solo l'ultimo process che ha iniziato quando ha eseguito il contenitore, quindi controlla il sleep piuttosto che ping . Se il command ping errori il contenitore continuerà a funzionare. In genere, si desidera che l'applicazione reale sia l'unica cosa che si avvia nel CMD .