Ecco una soluzione quando il contenitore Docker esce normalmente e puoi modificare il Dockerfile.
In genere, quando viene eseguito un contenitore Docker, un'applicazione viene servita eseguendo un comando. Dal riferimento Dockerfile ,
Entrambe le istruzioni CMD e ENTRYPOINT definiscono quale comando viene eseguito durante l'esecuzione di un contenitore. ... Dockerfile deve specificare almeno uno dei comandi CMD o ENTRYPOINT.
Quando si crea un'immagine e non si specifica alcun comando con CMD o ENTRYPOINT, verrà eseguito il comando CMD o ENTRYPOINT dell'immagine di base.
Ad esempio, il Dockerfile ufficiale di Ubuntu ha CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Ora, il bin/bash/
comando può accettare input e il docker run -it IMAGE_ID
comando allega STDIN al contenitore. Il risultato è che ottieni un terminale interattivo e il contenitore continua a funzionare.
Quando un comando con CMD o ENTRYPOINT viene specificato nel Dockerfile, questo comando viene eseguito durante l'esecuzione del contenitore. Ora, se questo comando può finire senza richiedere alcun input, finirà e il contenitore uscirà. docker run -it IMAGE_ID
sarà NON fornire terminale interattivo in questo caso. Un esempio potrebbe essere l'immagine docker creata dal Dockerfile di seguito-
FROM ubuntu
ENTRYPOINT echo hello
Se devi andare al terminale di questa immagine, dovrai mantenere il container in esecuzione modificando il comando entrypoint.
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
Dopo aver eseguito normalmente il contenitore con docker run IMAGE_ID
, puoi semplicemente andare su un altro terminale e utilizzare docker exec -it CONTAINER_ID bash
per ottenere il terminale del contenitore.