Что такое ошибка "container is not running"?

Ошибка Docker: Error response from daemon: container is not running возникает, когда Docker пытается выполнить операцию с остановленным контейнером.

Причины возникновения

  • Контейнер был остановлен
  • Контейнер завершил работу
  • Попытка выполнить команду в остановленном контейнере
  • Контейнер упал с ошибкой
  • Проблемы с ресурсами

Как отладить ошибку

  1. Проверь статус контейнера - docker ps -a
  2. Проверь логи контейнера - docker logs container-name
  3. Проверь детали контейнера - docker inspect container-name
  4. Проверь события - docker events

Как исправить ошибку

1. Запусти остановленный контейнер

1# Запусти контейнер
2docker start container-name
3
4# Проверь статус
5docker ps
6
7# Выполни команду в запущенном контейнере
8docker exec -it container-name /bin/bash

2. Проверь логи для диагностики

1# Посмотри логи контейнера
2docker logs container-name
3
4# Посмотри логи с временными метками
5docker logs -t container-name
6
7# Посмотри последние логи
8docker logs --tail 100 container-name

3. Пересоздай контейнер

1# Удали старый контейнер
2docker rm container-name
3
4# Создай новый контейнер
5docker run --name container-name -d image-name
6
7# Или используй docker-compose
8docker-compose up -d

4. Настрой restart policy

1# Создай контейнер с автоматическим перезапуском
2docker run --restart=always --name my-app -d nginx:latest
3
4# Или в docker-compose.yml
5services:
6  app:
7    image: nginx:latest
8    restart: always

5. Проверь ресурсы

1# Проверь использование ресурсов
2docker stats
3
4# Проверь свободное место
5df -h
6
7# Проверь память
8free -h

6. Используй health checks

1# В docker-compose.yml
2services:
3  app:
4    image: nginx:latest
5    healthcheck:
6      test: ["CMD", "curl", "-f", "http://localhost"]
7      interval: 30s
8      timeout: 10s
9      retries: 3

Как мониторить подобные ошибки

  • Мониторь статус контейнеров
  • Настрой алерты на остановленные контейнеры
  • Проверяй логи регулярно
  • Используй health checks

FAQ

В: Что делать, если контейнер постоянно падает?

О: Проверь логи, убедись в правильности конфигурации и ресурсов, настрой restart policy.

В: Как выполнить команду в остановленном контейнере?

О: Сначала запусти контейнер с docker start, затем используй docker exec.

В: Что делать с контейнерами, которые завершились с ошибкой?

О: Проверь логи для выявления причины, исправь конфигурацию и пересоздай контейнер.

Лучшие практики

  • Используй restart policy для важных контейнеров
  • Настрой health checks
  • Мониторь логи контейнеров
  • Используй docker-compose для управления
  • Регулярно проверяй статус контейнеров