Вход в контейнер и логи
Как заглянуть внутрь работающего контейнера и прочитать его логи при отладке.
docker exec запускает команду внутри уже работающего контейнера; docker logs показывает его вывод.
Просмотр логов: docker logs
Когда контейнер работает в фоне (-d), его вывод не виден в терминале. Прочитать его можно командой docker logs:
docker logs my-web
Чтобы следить за логами в реальном времени, как tail -f, добавьте -f (follow):
docker logs -f my-web
Показать только последние строки помогает --tail:
docker logs --tail 20 my-web
Логи — первое, куда смотрят, когда контейнер не работает как ожидалось или сразу падает.
Выполнение команды внутри: docker exec
Иногда нужно заглянуть внутрь работающего контейнера. Команда docker exec выполняет что-либо внутри него. Например, посмотреть содержимое директории:
docker exec my-web ls /usr/share/nginx/html
Интерактивная оболочка внутри контейнера
Чаще всего exec используют, чтобы попасть в интерактивную оболочку работающего контейнера — для отладки. Добавляем -it и запускаем оболочку:
docker exec -it my-web bash
Вы окажетесь внутри контейнера и сможете ходить по файловой системе, смотреть конфиги, проверять переменные окружения. Выйти — командой exit; сам контейнер при этом продолжит работать (в отличие от выхода из docker run -it).
В минимальных образах bash может отсутствовать — тогда используют sh:
docker exec -it my-web sh
run против exec
| Команда | Что делает |
docker run | создаёт новый контейнер из образа |
docker exec | выполняет команду в уже работающем контейнере |
Итог
docker logs ИМЯпоказывает вывод контейнера, с-f— в реальном времени.docker exec -it ИМЯ bashоткрывает оболочку внутри работающего контейнера.execработает с существующим контейнером, аrunсоздаёт новый.