ОНОВЛЕННЯ
Найпростіший метод: Використання 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
сш
Якщо вам потрібен постійний доступ, ви можете встановити 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
дивіться 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
. Отже, ви просто відкриєте оболонку всередині контейнера.