ОБНОВЛЕНИЕ
Самый простой метод: использование docker exec
Docker версии 1.3 или новее поддерживает команду, exec
которая ведет себя подобно nsenter
. Эта команда может запустить новый процесс в уже запущенном контейнере (в контейнере должен быть запущен процесс PID 1). Вы можете запустить, /bin/bash
чтобы изучить состояние контейнера:
docker exec -t -i mycontainer /bin/bash
см. документацию командной строки Docker
Альтернативный метод 1
Снимок
Вы можете оценить файловую систему контейнера следующим образом:
# 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
Таким образом, вы можете оценить файловую систему работающего контейнера в точный момент времени. Контейнер все еще работает, никакие будущие изменения не включены.
Позже вы можете удалить снимок, используя (файловая система работающего контейнера не затронута!):
docker rmi mysnapshot
Альтернативный метод 2
SSH
Если вам нужен постоянный доступ, вы можете установить sshd в свой контейнер и запустить демон sshd:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
Таким образом, вы можете запустить свое приложение, используя ssh (подключитесь и выполните то, что вы хотите).
ОБНОВЛЕНИЕ: Альтернативный метод 3
nsenter
Используйте nsenter
, см. Https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/
Короткая версия: с помощью nsenter вы можете поместить оболочку в существующий контейнер, даже если этот контейнер не запускает SSH или какой-либо специальный демон.
docker exec <container> bash
. Итак, вы просто открываете оболочку внутри контейнера.