Создать docker-compose из запущенного контейнера с помощью docker-autocompose

Почему стоит использовать docker-compose
Docker упрощает упаковку приложений в контейнеры и решает множество проблем с зависимостями. Тем не менее команды docker run часто длинные и неудобные для повторного использования. Docker Compose хранит конфигурацию сервисов в одном YAML-файле и делает запуск многоконтейнерных стеков простым:
- Повторяемость: один файл — одинаковый запуск на разных машинах.
- Поддержка сетей и томов: легко увидеть и изменить связи между сервисами.
- Управление: единая команда для старта/остановки/лога.
Если проект не предоставляет docker-compose.yml, вручную переписывать параметры из docker run в YAML неудобно и подвержено ошибкам. Здесь на помощь приходит docker-autocompose.

Кратко о docker-autocompose
docker-autocompose — это небольшая Python-программа, которая читает параметры запущенного контейнера и формирует эквивалентный блок сервиса для docker-compose.yml. Вы получаете stdout с содержимым YAML, который можно сохранить и использовать с docker-compose up -d.
Что она обычно извлекает:
- Порты (параметры -p)
- Томa (параметры -v)
- Переменные окружения (-e)
- Политики рестарта (–restart)
- Имя контейнера (–name)
- Сетевые привязки
Важно: некоторые детали, например ограничения cgroups, устройства, секреты или сложные сетевые сценарии, могут не преобразовываться полностью автоматически — их нужно проверить вручную.
Установка docker-autocompose на Linux
docker-autocompose распространяется как Python-пакет, поэтому сначала установите pip для вашей системы.
Для Debian/Ubuntu:
sudo apt install python3-pipДля Arch Linux и производных:
sudo pacman -S python-pipДля CentOS / RHEL:
sudo yum install python3 python3-wheelТакже убедитесь, что у вас установлены Docker и Docker Compose.
Клонируйте репозиторий и установите пакет:
git clone https://github.com/Red5d/docker-autocompose.git
cd docker-autocompose
sudo python3 setup.py installПосле этого команда autocompose.py будет доступна в системе.
Важно: для доступа к Docker API утилите нужны права на сокет /var/run/docker.sock — либо запуск от root, либо подходящие привилегии пользователя.
Как использовать docker-autocompose
Общий сценарий:
- Запустите контейнер обычной командой docker run.
- Проверьте, что сервис работает (например, откройте localhost:порт).
- Сгенерируйте docker-compose-блок:
sudo autocompose.py Пример: мы установили браузерный IRC-клиент Dispatch и запустили его так:
mkdir ~/dispatch
docker run -p 8080:80 -v /home/david/dispatch:/data --restart no -d khlieng/dispatchЗатем генерируем Compose-конфигурацию для контейнера dispatch:
sudo autocompose.py dispatchЕсли нужно создать конфигурацию для всех запущенных контейнеров:
sudo autocompose.py $(docker ps -aq)Скопируйте stdout в новый файл:
nano docker-compose.ymlВставьте содержимое, сохраните (Ctrl + O) и выйдите (Ctrl + X). Теперь стартуйте стек:
docker-compose up -d
Вы также можете запустить docker-autocompose внутри контейнера, если не хотите устанавливать Python-скрипт локально:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose 
Что автогенерация покрывает, а что нужно править вручную
Когда autocompose помогает:
- Простые контейнеры с монтированными томами, портами и переменными окружения.
- Быстрая миграция одиночных сервисов в Compose для резервного копирования и управления.
Ограничения и вещи для проверки вручную:
- Секреты и конфигурации: Docker Secrets/Configs не всегда идентифицируются автоматически.
- Capabilities, device mappings и privileged-флаги могут не переноситься.
- Healthcheck: если он отсутствует, добавьте вручную для надёжного orkestrирования.
- Сетевые алиасы и нестандартные сетевые драйверы: проверьте сеть в YAML.
- Относительные пути томов: возможно, потребуется корректировать пути под окружение.
Important: всегда проверяйте сгенерированный YAML перед поднятием в production. Запустите docker-compose config для валидации:
docker-compose configПрактическая методика миграции контейнера в docker-compose (шаги)
- Запустите контейнер и убедитесь, что он работает.
- Сгенерируйте Compose-вывод: autocompose.py
. - Сохраните в docker-compose.yml и запустите docker-compose config для проверки.
- Сравните ключи: порты, тома, переменные окружения, restart-политику.
- Добавьте healthcheck и depends_on, если нужно.
- Тестируйте локально: docker-compose up -d -> проверить работу -> docker-compose down.
- Перенесите файл на целевой хост и откатите запуск при необходимости.
Карта соответствий: флаги docker run -> docker-compose
| docker run флаг | docker-compose поле | Примечания |
|---|---|---|
| -p 8080:80 | ports: - “8080:80” | Переносится обычно корректно |
| -v /host/path:/container/path | volumes: - /host/path:/container/path | Проверьте права и относительные пути |
| -e VAR=value | environment: - VAR=value | Секреты лучше вынести в env_file или secrets |
| –name name | container_name: name | Необязательно в Compose, но удобно |
| –restart no | restart: “no” | Перевести политику рестарта важно |
Чек-листы по ролям
Администратор (self-hosting):
- Проверил пути томов и доступы (UID/GID).
- Добавил healthcheck и restart-политику.
- Настроил бэкап для томов.
- Проверил ограничения сети и firewall.
Разработчик:
- Убедился, что переменные окружения не содержат секретов в открытом виде.
- Вынес чувствительные данные в .env или Docker Secrets.
- Добавил локальный docker-compose.override.yml для разработки.
Hobbyist/энтузиаст Raspberry Pi:
- Проверил архитектуру образа (armhf/arm64/x86).
- Использует относительные тома и переменные окружения для конфигурации.
- Тестирует один хост за раз и делает снимок перед изменениями.
Альтернативные подходы
- Ручной перевод: использовать docker inspect и перенести нужные поля вручную — надежно, но трудоёмко.
- Скрипты на основе docker inspect + jq: автоматизация с кастомной логикой трансформации.
- Использовать контейнерный вариант docker-autocompose (через монтирование /var/run/docker.sock) для быстрого запуска без установки.
Подсказки и сниппеты (cheat sheet)
Команды для повседневной работы:
docker ps -a # список контейнеров
docker inspect # подробный JSON контейнера
docker logs -f # смотреть логи
docker-compose up -d # поднять стек
docker-compose down # остановить стек
docker-compose config # проверить синтаксис и merge Мини-шаблон для секции services в docker-compose.yml:
services:
app:
image: your-image:tag
container_name: app
ports:
- "8080:80"
volumes:
- ./data:/data
environment:
- VAR=value
restart: unless-stoppedРиски и способы смягчения
| Риск | Вероятность | Влияние | Митигирование |
|---|---|---|---|
| Неправильные пути томов | Средняя | Высокое | Проверять локальные пути и права до запуска |
| Утечка секретов в YAML | Низкая | Высокое | Использовать .env или Docker Secrets |
| Несовместимость образа с архитектурой | Низкая | Средняя | Проверять архитектуру образа (docker inspect) |
| Пропущенные capabilities | Низкая | Средняя | Ручная корректировка docker-compose.yml |
Notes: для production-среды всегда применяйте приватные реестры, управление доступом и мониторинг.
Когда autocompose не подходит (контрпримеры)
- Сложные мульти-хостовые сетевые конфигурации с overlay-сетями — их нужно проектировать вручную.
- Сценарии с использованием Docker Secrets/Configs в Swarm — autocompose не всегда создаст правильные блоки.
- Контейнеры с нестандартными правами доступа к устройствам (например, GPU, последовательные порты) — требуется ручная настройка.
Краткий глоссарий (1 строка)
- Docker: платформа для упаковки приложений в контейнеры.
- Контейнер: изолированный экземпляр приложения с образа.
- Образ (Image): шаблон для создания контейнера.
- Docker Compose: инструмент для описания и запуска мультиконтейнерных приложений в YAML.
Заключение
docker-autocompose — быстрый способ перевести работающий контейнер в docker-compose.yml и упростить последующее управление. Он экономит время при простых сценариях, но требует валидации и ручной доработки для production и сложных конфигураций. Используйте приведённые чек-листы, шаблоны и подсказки, чтобы минимизировать риски при миграции.
Важно: всегда тестируйте сгенерированный файл в изолированном окружении перед переносом в рабочую инфраструктуру.
Краткое резюме и действия:
- Установите pip и docker-autocompose.
- Запустите контейнер, затем выполните autocompose.py для генерации YAML.
- Проверяйте и дополняйте файл: healthcheck, secrets, права томов.
- Храните конфигурации в системе контроля версий и используйте .env для переменных.
Похожие материалы
Как защитить телефон от слежки и перехвата
Тема и шрифт Блокнота в Windows 11
Microsoft Defender: как анализировать и удалять угрозы
Adobe Animate: руководство для начинающих
Mission DALEK: как создать свой эпизод Doctor Who