deшка
Урок 5.9

Диагностика: исправляем причину сбоя

Читаем состояние и журнал, исправляем пароль, порт и путь к входу.

При сбое сначала определяют этап: доступен ли Engine, создан ли контейнер, работает ли программа, куда направлено подключение, где лежит файл. Это позволяет исправить настройку, которая вызвала ошибку, и сохранить остальные данные.

Проверка по шагам: Engine, образ, процесс, подключение и данные.

Клиент и служба Docker

docker version показывает сведения о Client и Server. Если Server недоступен, проверьте готовность Docker Desktop либо Linux-службы. docker context ls на компьютере покажет настройки подключения: команда может обращаться к другому Engine.

Если Engine работает, но образ не скачивается, выполните docker pull с точным именем. Ошибка авторизации указывает на доступ к реестру, no matching manifest — на возможное отсутствие сборки для вашей платформы. До журнала программы дело ещё не дошло.

Программа завершилась

docker ps -a
docker logs broken-db
docker inspect broken-db

В учебном окружении broken-db создан из PostgreSQL без пароля. Для пустой базы официальный образ требует POSTGRES_PASSWORD, и журнал объясняет, какой настройки не хватает. Исправление: удалить завершённый экземпляр и создать его с нужной переменной. Если база содержит данные, её том сначала сохраняют и подключают к новому экземпляру.

Нормальный короткий скрипт тоже имеет статус Exited. Поэтому статус читают вместе с кодом выхода и журналом. ModuleNotFoundError у Python указывает на недостающую библиотеку: её добавляют в рецепт образа и пересобирают программу.

Для нехватки памяти полезны OOMKilled, последние строки журнала и наблюдение через docker stats. Детали сигналов и лимитов разобраны в предыдущем уроке.

База работает, клиент не подключается

Проверьте сервер внутри контейнера:

docker exec wrong-port pg_isready
docker exec wrong-port psql -U postgres -c "SELECT 1;"
docker inspect wrong-port

Если база принимает запрос внутри, сравните адрес внешнего клиента с опубликованным портом. Например, в контейнере PostgreSQL слушает 5432, на компьютере опубликован 15431, а клиент ожидает 15432. Нужно исправить адрес клиента или пересоздать контейнер с согласованной публикацией. Подключение прежнего тома сохранит данные.

Connection refused означает, что соединение с указанной точкой не установлено. password authentication failed означает, что клиент дошёл до PostgreSQL, но не прошёл проверку доступа. Здесь проверяют имя пользователя и пароль. Локальный psql внутри контейнера может использовать другой способ аутентификации.

Файл есть на компьютере, но не виден программе

docker inspect wrong-input
docker exec wrong-input ls /input

В inspect сравните source подключения с папкой исходного файла, а target — с путём, который читает программа. В задании файл находится в /home/de/incoming, но подключена пустая папка /home/de/empty. Исправление пути при пересоздании вернёт программе доступ к CSV; режим readonly можно сохранить.

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

Сохраняем данные во время исправления

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

Попробуйте в учебном терминале

Подготовлены три неисправных контейнера. У broken-db нет пароля, у wrong-port неверная публикация, у wrong-input подключена пустая папка. Исправьте каждую причину; файл marker.txt в томе базы должен сохраниться.

Здесь команды Docker имитируются: терминал хранит учебное состояние образов, контейнеров и файлов. Реальные службы и внешнюю сеть он не запускает.

учебный терминалзадания 0 / 3
Введите команду. Подсказка: help покажет, что умеет этот терминал.
de@deshka:~$
ЗАДАНИЯ
  1. 1. Разберитесь по logs, почему broken-db завершился. Пересоздайте его с POSTGRES_PASSWORD=study-only-password.
  2. 2. Для wrong-port замените публикацию на 15432:5432. Сохраните port-data и его marker.txt.
  3. 3. В wrong-input должен читаться /input/source.csv из /home/de/incoming. Исправьте bind mount и сохраните режим readonly.
решённые задания сохранятся в прогресс после входа
Войти, чтобы отмечатьдальше →
5.10 →Проверка понимания: собираем окружение