sfondo
Un contenitore Docker esegue un processo (il "comando" o "entrypoint") che lo mantiene attivo. Il contenitore continuerà a funzionare finché il comando continua a essere eseguito.
Nel tuo caso, il comando ( /bin/bash
, per impostazione predefinita, on centos:latest
) esce immediatamente (come fa bash quando non è collegato a un terminale e non ha nulla da eseguire).
Normalmente, quando si esegue un contenitore in modalità demone (con -d
), il contenitore esegue una sorta di processo daemon (come httpd
). In questo caso, finché il daemon httpd è in esecuzione, il contenitore rimarrà in vita.
Quello che sembra stia provando a fare è mantenere vivo il contenitore senza un processo daemon in esecuzione all'interno del contenitore. Questo è alquanto strano (perché il contenitore non sta facendo nulla di utile finché non interagisci con esso, forse condocker exec
), ma ci sono alcuni casi in cui potrebbe avere senso fare qualcosa del genere.
(Intendevi arrivare a un prompt bash all'interno del contenitore? È facile! docker run -it centos:latest
)
Soluzione
Un modo semplice per mantenere attivo un contenitore in modalità demone a tempo indeterminato è quello di eseguirlo sleep infinity
come comando del contenitore. Questo non fa affidamento su cose strane come l'allocazione di un TTY in modalità demone. Anche se si basa sul fare cose strane come l'uso sleep
come comando principale.
$ docker run -d centos:latest sleep infinity
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d651c7a9e0ad centos:latest "sleep infinity" 2 seconds ago Up 2 seconds nervous_visvesvaraya
Soluzione alternativa
Come indicato da cjsimon, l' -t
opzione alloca una "pseudo-tty". Questo inganna il tentativo di continuare a funzionare indefinitamente perché pensa che sia collegato a un TTY interattivo (anche se non hai modo di interagire con quel particolare TTY se non lo passi -i
). Comunque, anche questo dovrebbe fare il trucco:
$ docker run -t -d centos:latest
Non sono sicuro al 100% se -t
produrrà altre strane interazioni; forse lasciare un commento qui sotto se lo fa.