Программы
Как войти в запущенный Docker-контейнер и почему так делать не надо

Как войти в запущенный Docker-контейнер и почему так делать не надо

Иногда интересно: что же происходит внутри Docker-контейнера

Если коротко отвечать на первую часть вопроса, хватит одной команды docker:

docker exec -ti {{ container name }} /bin/sh

– так мы запустим в интерактивном режиме команду /bin/sh (shell, командная строка) внутри уже запущенного контейнера.

  • -i – интерактивный режим, не закрываем STDIN при старте.
  • -t – запуск псевдо-терменала.

Опять же, узнать имя контейнера можно с помощью

docker ps -a

– ключ -a покажет нам все контейнеры, в том числе погашенные. В выключенные вы, естественно, не зайдёте. И это первая причина не лезть своими шаловливыми ручками в контейнер. Нет, правда, что вы там хотите посмотреть?

Логи вы можете увидеть через

docker logs {{ container name }}

А если вы их там не видите – а вы вообще правильно используете Docker?

О вреде старых привычек

Часто вижу "оригинальные" подходы а ля "запущу ка я supervisord как entry point, а в нём подниму все остальные процессы". Спорить не буду – такой финт ушами пройдёт, но он возникает в основном от того, что лень разбираться с Docker, что повлечёт весьма странное поведение системы.

Используйте стандартные средства, не скупитесь на контейнеры: один контейнер – один небольшой простой процесс.

И если вам нужно перезапускать упавшие сервисы (некоторые пеняют на это) – используйте политики перезапуска Docker.

О шаловливых ручонках

Лезть в Docker-контейнер вредно потому, что вы решите (если решите) проблему для одного конкретного контейнера, который при следующем перезапуске будет перераскатан из образа. Стоит относиться к нему как к процессу без состояния – в любой момент могут быть потеряны все изменения, данные.

Поэтому и ковыряться в контейнере может иметь смысл, если вы разрабатываете в сервис в контейнере, но вносите все фиксы именно в образ.

Используйте внешние специализированные средства

Но что же делать, если вам таки надо иногда смотреть на нагрузку, читать логи и т.д.? Всё это стоит автоматизировать и упаковать в ваши сервисы, которые крутятся в Docker-контейнерах.

К примеру, логи можно собирать через filebeat, метрики через prometheus, а про ошибки узнавать не от пользователей, а через sentry.

Таким образом, на не нужно ходить в контейнер, а данные не потеряются при его дропе / перезапуске / выходе из строя хостовой машины. Вместо этого мы получаем централизованную систему для обработки служебных данных. А учитывая, что один запрос может ходить между несколькими сервисами, так ещё и проще будет разобраться в судьбе этого запроса, чем лезть на десяток машин.

Также может быть вам интересно:

Как узнать, кто подключился по SSH

Получение всех SSH-соединений из терминала Linux

Читать »

Скрытая угроза. Git и зловреды уже на серверах

При разработке ПО мы часто забываем про одну из самых важны уязвимостей

Читать »
Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

Во время работы программы часто нужно сохранять некоторые важные записи о процессе выполнения команды. В Python есть довольно мощный модуль для работы с логами - давайте разберёмся с тем, как его использовать.

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django - своя регистрация на сайте

Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит - надо уметь создавать пользователей, либо предоставлять возможность регистрации Django пользователей.

Фото Решаем проблему ERROR 1348 column password is not updatable при обновлении пароля root в MySQL / MariaDB

Решаем проблему ERROR 1348 column password is not updatable при обновлении пароля root в MySQL / MariaDB

В MySQL есть временами непонятные ограничения, которые не позволяют привычным нам образом его использовать. Однако, если разобраться, то всё начинает иметь смысл.

Фото Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

MySQL и её новая сестричка из мира СПО – MariaDB довольно сильно распространены на хостингах, да и LAMP никто не отменял – пользуются ещё. Так вот не так давно стала возникать эта ошибка. Как её чинить? В этой заметке.

Фото От Google не уйти!?

От Google не уйти!?

Гугл плохой - выкачивает деньги, следит за нами, передаёт кому-надо информацию. Естественно, нельзя от него уйти, ведь он уникален! Судите сами...

Фото У коммерческой Ubuntu увеличится время поддержки до 10 лет

У коммерческой Ubuntu увеличится время поддержки до 10 лет

Стоит ли удивиться, что время поддержки увеличит доход? Или же тому, что Canonical так долго к этому шёл?