AGGIORNAMENTO
Metodo più semplice: utilizzo della finestra mobile exec
Docker versione 1.3 o successiva supporta il comando exec
che si comporta in modo simile nsenter
. Questo comando può eseguire un nuovo processo in un contenitore già in esecuzione (nel contenitore deve essere già in esecuzione un processo PID 1). È possibile eseguire /bin/bash
per esplorare lo stato del contenitore:
docker exec -t -i mycontainer /bin/bash
consultare la documentazione della riga di comando Docker
Metodo alternativo 1
Istantanea
È possibile valutare il filesystem contenitore in questo modo:
# find ID of your running container:
docker ps
# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot
# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash
In questo modo, è possibile valutare il filesystem del container in esecuzione nel preciso momento temporale. Il contenitore è ancora in esecuzione, non sono incluse modifiche future.
Successivamente puoi eliminare l'istantanea usando (il filesystem del container in esecuzione non è interessato!):
docker rmi mysnapshot
Metodo alternativo 2
ssh
Se hai bisogno di un accesso continuo, puoi installare sshd nel tuo contenitore ed eseguire il demone sshd:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
In questo modo, puoi eseguire la tua app usando ssh (connettiti ed esegui ciò che desideri).
AGGIORNAMENTO: metodo alternativo 3
nsenter
Utilizzare nsenter
, consultare https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/
La versione breve è: con nsenter, è possibile ottenere una shell in un contenitore esistente, anche se quel contenitore non esegue SSH o alcun tipo di demone per scopi speciali
docker exec <container> bash
. Quindi, basta aprire una shell all'interno del contenitore.