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
- Создайте папку для данных (локальная магистраль для тома):
mkdir ~/dispatch- Запустите контейнер привычной docker run командой (пример использует порт 8080):
docker run -p 8080:80 -v /home/david/dispatch:/data --restart no -d khlieng/dispatch- Убедитесь, что контейнер работает (откройте http://localhost:8080). Затем сгенерируйте docker-compose прямо из запущенного контейнера:
sudo autocompose.py Например, если контейнер называется dispatch:
sudo autocompose.py dispatchИли создайте compose для всех запущенных контейнеров сразу:
sudo autocompose.py $(docker ps -aq)- В стандартном режиме 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.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 манифестов из одного источника правды.
Мини‑методология: от одноразовой команды до стабильного стека
- Запустите контейнер через docker run и проверьте работу сервиса.
- Сгенерируйте docker-compose с помощью autocompose.
- Добавьте в compose: сети, secrets, healthcheck, зависимости (depends_on).
- Перенесите чувствительные переменные в .env или Docker secrets.
- Прогоните локально: docker-compose up -d; проверьте логи и работоспособность.
- Версионируйте 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 для безопасного и предсказуемого развёртывания.
Похожие материалы
Аудиокниги на Spotify: как слушать бесплатно
Управление Android‑приложениями на Windows
Ускорение ОЗУ в Linux — советы и инструкции
Happier — приложение для привычек и счастья
Гибернация в Windows 11: включение и советы