Гид по технологиям

docker-autocompose: автоматическая генерация docker-compose

6 min read DevOps Обновлено 25 Dec 2025
docker-autocompose: автоматическая генерация docker-compose
docker-autocompose: автоматическая генерация docker-compose

Важно: сгенерированный файл нужно проверить и при необходимости поправить — автогенерация не всегда покрывает кастомные сети, секреты или специфичные политики рестарта.

корабли с контейнерными грузами в порту

Docker — ключевой инструмент для простого разворачивания приложений в контейнерах. docker-compose упрощает оркестрацию и межконтейнерное взаимодействие, но не все проекты включают готовый docker-compose.yml. docker-autocompose решает эту проблему: он генерирует compose-файл на основе уже запущенного контейнера.

Зачем нужен docker-autocompose

Кратко: многие проекты публикуют Docker-образы, но не всегда подготовлены docker-compose файлы. В результате пользователи вынуждены вручную переводить длинные docker run команды в YAML — рутинная и подверженная ошибкам работа.

Этот инструмент удобен, когда:

  • вы протестировали контейнер с docker run и хотите сохранить конфигурацию для повторного запуска;
  • нужно быстро собрать единый docker-compose.yml для множества локально запущенных контейнеров;
  • требуется миграция на окружение, где удобнее управлять стеком через compose.

Что делает docker-autocompose (коротко)

  • Считывает конфигурацию запущенного контейнера (порты, тома, переменные окружения, команды запуска).
  • Формирует эквивалентные блоки services в формате docker-compose.yml.
  • Позволяет генерировать один файл для отдельного контейнера или для списка контейнеров.

Установка на Linux

docker-autocompose распространяется как Python-приложение, поэтому нужно установить pip для вашей дистрибуции и Docker с Docker Compose заранее.

Установка pip на Debian/Ubuntu:

sudo apt install python3-pip

Установка pip на Arch Linux:

sudo pacman -S python-pip

Установка pip на CentOS / RHEL:

sudo yum install python3 python3-wheel

Клонируйте репозиторий и установите пакет:

git clone https://github.com/Red5d/docker-autocompose.git
cd docker-autocompose
sudo python3 setup.py install

Теперь утилита установлена и доступна как autocompose.py (может потребоваться запуск от root для доступа к Docker сокету).

Пример: как сгенерировать compose для приложения Dispatch

  1. Создайте папку для данных (локальная магистраль для тома):
mkdir ~/dispatch
  1. Запустите контейнер привычной docker run командой (пример использует порт 8080):
docker run -p 8080:80 -v /home/david/dispatch:/data --restart no -d khlieng/dispatch

интерфейс IRC клиента Dispatch, доступный по localhost:8080

  1. Убедитесь, что контейнер работает (откройте http://localhost:8080). Затем сгенерируйте docker-compose прямо из запущенного контейнера:
sudo autocompose.py 

Например, если контейнер называется dispatch:

sudo autocompose.py dispatch

Или создайте compose для всех запущенных контейнеров сразу:

sudo autocompose.py $(docker ps -aq)
  1. В стандартном режиме autocompose выводит YAML в stdout. Скопируйте вывод и создайте файл:
nano docker-compose.yml

Вставьте содержимое, сохраните (Ctrl+O) и выйдите (Ctrl+X). Запустите стек:

docker-compose up -d

Альтернативно можно запускать сам autocompose в контейнере, подключив Docker сокет хоста:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose  

пример docker-compose, сгенерированного docker-autocompose

Что нужно проверить в сгенерированном docker-compose.yml

Важно прогнать и ручной инспекцией проверить следующие вещи:

  • Политики рестарта (restart), особенно для production — обычно используют restart: unless-stopped или restart: always.
  • Сети: автогенерация может оставлять host или bridge; настройте пользовательские сети при необходимости.
  • Секреты и конфиденциальные переменные: переменные окружения с паролями лучше вынести в .env или Docker secrets.
  • Переменные окружения, заданные через –env-file: убедитесь, что все значения присутствуют.
  • Монтирование томов: пути на хосте могут отличаться в серверной среде.
  • Healthcheck: автогенератор может не добавлять healthcheck — добавьте при необходимости.

Когда автогенерация НЕ подходит (контрпримеры)

  • Комплексные многоконтейнерные приложения с явными сетями, секретами и зависимостями: автогенерация даст базовый файл, но он не отразит архитектуру и политики безопасности.
  • Контейнеры, использующие специфичные драйверы volumes, устройства или привилегированные режимы (privileged): автогенератор может не корректно отразить эти настройки.
  • Системы с orchestration через Kubernetes или Nomad: docker-compose — не всегда целевой формат.

Альтернативные подходы

  • Ручное преобразование docker run в compose — даёт полный контроль и документирует логику запуска.
  • Использование docker-compose-configs или других конвертеров, но большинство альтернатив строятся на похожем принципе — чтении конфигурации контейнера.
  • Для production — написание Dockerfile и поддержание образов в CI + использование Docker Compose или Kubernetes манифестов из одного источника правды.

Мини‑методология: от одноразовой команды до стабильного стека

  1. Запустите контейнер через docker run и проверьте работу сервиса.
  2. Сгенерируйте docker-compose с помощью autocompose.
  3. Добавьте в compose: сети, secrets, healthcheck, зависимости (depends_on).
  4. Перенесите чувствительные переменные в .env или Docker secrets.
  5. Прогоните локально: docker-compose up -d; проверьте логи и работоспособность.
  6. Версионируйте docker-compose в репозитории и включите в CI для тестов.

Роли и чек-листы

DevOps / системный администратор:

  • Проверить политики рестарта.
  • Перенести секреты в менеджер секретов.
  • Настроить пользовательские сети и firewall.

Разработчик:

  • Проверить переменные окружения и конфигурации томов.
  • Добавить healthcheck и информацию о зависимостях.
  • Убедиться, что Dockerfile актуален и минимален.

Оператор (production):

  • Тестировать сгенерированный файл в staging.
  • Автоматизировать развёртывание (CI/CD).
  • Мониторить перезапуски и логи контейнеров.

Безопасность и приватность

  • Никогда не храните секреты в явном виде в репозитории. Используйте .env в .gitignore или интеграцию Docker secrets.
  • При подключении /var/run/docker.sock контейнеров будьте осторожны: это даёт полный доступ к Docker API хоста.
  • Проверяйте, не выставлены ли ненужные порты в наружную сеть.

Совместимость и миграция

  • На ARM-платформах (Raspberry Pi) убедитесь, что образы поддерживают нужную архитектуру (arm64/armhf). Если образ не подходит, ищите альтернативы или собирайте свои образы.
  • При переносе между серверами проверьте соответствие путей томов и доступность хранилища.

Типичные проблемы и способы устранения

Проблема: контейнер не стартует после docker-compose up Решение: проверить docker-compose.yml на корректность отступов и значений, посмотреть docker-compose logs , убедиться, что все тома доступны.

Проблема: отсутствуют переменные окружения Решение: экспортируйте переменные в .env или проверьте, как они были заданы в исходной docker run команде.

Проблема: автогенерация не учитывает host networking Решение: вручную скорректировать секцию networks и network_mode: host в compose.

Критерии приёмки

  • docker-compose запускает все сервисы без ошибок: docker-compose ps показывает статус Up.
  • Сервисы доступны по ожидаемым портам и проходят healthcheck.
  • Секреты вынесены из репозитория и защищены.
  • Логи не содержат критических ошибок при старте и в работе.

Глоссарий (1‑строчно)

  • Контейнер: изолированное окружение, в котором выполняется приложение.
  • Docker Compose: инструмент для определения и запуска многоконтейнерных Docker-приложений.
  • Volume (том): постоянное хранилище данных для контейнера.
  • Healthcheck: команда, определяющая статус готовности сервиса.

Шаблон быстрой проверки (cheat sheet)

  • autocompose.py -> получить YAML
  • autocompose.py $(docker ps -aq) -> собрать все контейнеры
  • Проверить: restart, ports, volumes, environment, networks, healthcheck
  • Перенести секреты в .env или Docker secrets

Социальная превью и короткое объявление

OG title: docker-autocompose — генерация docker-compose из запущенных контейнеров

Короткое объявление (100–200 слов):

docker-autocompose помогает быстро перевести одноразовую docker run команду в управляемый docker-compose.yml. Утилита особенно полезна для тестирования приложений, миграции локальных экспериментов в staging и для объединения множества локальных контейнеров в единый стек. После генерации важно проверить политики рестарта, монтирование томов и переменные окружения, а также вынести секреты из файлов конфигурации.

Краткое резюме

  • docker-autocompose ускоряет перенос docker run команд в docker-compose.yml и полезен для локальной и промежуточной автоматизации.
  • Всегда проверяйте и дополняйте сгенерированный файл — автогенерация даёт основу, но не заменяет архитектурных решений и мер безопасности.

Экспериментируйте локально, а затем оформляйте стабильные конфигурации в репозитории и CI для безопасного и предсказуемого развёртывания.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Аудиокниги на Spotify: как слушать бесплатно
Аудиокниги

Аудиокниги на Spotify: как слушать бесплатно

Управление Android‑приложениями на Windows
Инструкции

Управление Android‑приложениями на Windows

Ускорение ОЗУ в Linux — советы и инструкции
Linux

Ускорение ОЗУ в Linux — советы и инструкции

Happier — приложение для привычек и счастья
Приложения

Happier — приложение для привычек и счастья

Гибернация в Windows 11: включение и советы
Windows 11

Гибернация в Windows 11: включение и советы

Отключение автоматических обновлений в Google Play
Android.

Отключение автоматических обновлений в Google Play