GNU/Linux >> Linux Esercitazione >  >> Linux

Avvia automaticamente i servizi nel contenitore Docker

EDIT:ho imparato molto su Docker da quando ho pubblicato originariamente questa risposta. "Avvio automatico dei servizi nei contenitori Docker" non è un buon modello di utilizzo per Docker. Utilizza invece qualcosa come fleet, Kubernetes o persino Monit/SystemD/Upstart/Init.d/Cron per avviare automaticamente i servizi che vengono eseguiti all'interno dei container Docker.

RISPOSTA ORIGINALE:Se stai avviando il contenitore con il comando /bin/bash , allora puoi farlo nel modo descritto qui:https://stackoverflow.com/a/19872810/2971199

Quindi, se inizi il contenitore con docker run -i -t IMAGE /bin/bash e se vuoi avviare automaticamente apache2 all'avvio del contenitore, modifica /etc/bash.bashrc nel contenitore e aggiungi /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf (o qualunque sia il comando di avvio di apache2) a una nuova riga alla fine del file.

Salva le modifiche alla tua immagine e riavviala con docker run -i -t IMAGE /bin/bash e troverai apache2 in esecuzione quando ti colleghi.


Immagino che non puoi. Quello che puoi fare è creare un'immagine usando un Dockerfile e definire un CMD in esso, che verrà eseguito all'avvio del contenitore. Consulta la documentazione del builder per le nozioni di base (https://docs.docker.com/reference/builder/) e consulta Eseguire automaticamente un servizio in un contenitore docker per informazioni su come mantenere il servizio in esecuzione.

Non è necessario automatizzarlo utilizzando un Dockerfile. Puoi anche creare l'immagine tramite un commit manuale come fai tu ed eseguirla dalla riga di comando. Quindi, fornisci il comando che dovrebbe eseguire (che è esattamente ciò che effettivamente fa Dockerfile CMD). Puoi anche sovrascrivere il Dockerfiles CMD in questo modo:verrà eseguito solo l'ultimo CMD, che è il comando della riga di comando se avvii il contenitore usandone uno. Il docker run -i -t base /bin/bash di base comando dalla documentazione è un esempio. Se il tuo comando diventa troppo lungo, puoi ovviamente creare uno script di convenienza.


Un'opzione che potresti utilizzare sarebbe quella di utilizzare un gestore di processi come Supervisord per eseguire più processi. Qualcuno ci è riuscito con sshd e mongodb:https://github.com/justone/docker-mongodb


Linux
  1. Un'introduzione a Docker

  2. Come eseguire un comando su un contenitore Docker in esecuzione

  3. Docker Run vs Start vs Create:spiegazione della differenza

  4. Esempi utili del comando Docker ps

  5. Ripeti il ​​​​comando automaticamente in Linux

Come elencare/avviare/arrestare i contenitori Docker

Come utilizzare il comando Esegui Docker con esempi

Come SSH in un Docker Container

Come gestire i container Docker

Come elencare/avviare/arrestare/eliminare i contenitori docker

Reindirizzamento dell'output del comando nella finestra mobile