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

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

6 min read Docker Обновлено 29 Mar 2026
Создать docker-compose из запущенного контейнера
Создать docker-compose из запущенного контейнера

Грузовые корабли, пришвартованные у причала

Почему стоит использовать docker-compose

Docker упрощает упаковку приложений в контейнеры и решает множество проблем с зависимостями. Тем не менее команды docker run часто длинные и неудобные для повторного использования. Docker Compose хранит конфигурацию сервисов в одном YAML-файле и делает запуск многоконтейнерных стеков простым:

  • Повторяемость: один файл — одинаковый запуск на разных машинах.
  • Поддержка сетей и томов: легко увидеть и изменить связи между сервисами.
  • Управление: единая команда для старта/остановки/лога.

Если проект не предоставляет docker-compose.yml, вручную переписывать параметры из docker run в YAML неудобно и подвержено ошибкам. Здесь на помощь приходит docker-autocompose.

Ubuntu, запущенная как Docker-контейнер

Кратко о 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

Общий сценарий:

  1. Запустите контейнер обычной командой docker run.
  2. Проверьте, что сервис работает (например, откройте localhost:порт).
  3. Сгенерируйте 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

Клиент Dispatch (IRC) доступен на localhost:8080

Вы также можете запустить docker-autocompose внутри контейнера, если не хотите устанавливать Python-скрипт локально:

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

Сгенерированный docker-compose, созданный 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 (шаги)

  1. Запустите контейнер и убедитесь, что он работает.
  2. Сгенерируйте Compose-вывод: autocompose.py .
  3. Сохраните в docker-compose.yml и запустите docker-compose config для проверки.
  4. Сравните ключи: порты, тома, переменные окружения, restart-политику.
  5. Добавьте healthcheck и depends_on, если нужно.
  6. Тестируйте локально: docker-compose up -d -> проверить работу -> docker-compose down.
  7. Перенесите файл на целевой хост и откатите запуск при необходимости.

Карта соответствий: флаги docker run -> docker-compose

docker run флагdocker-compose полеПримечания
-p 8080:80ports: - “8080:80”Переносится обычно корректно
-v /host/path:/container/pathvolumes: - /host/path:/container/pathПроверьте права и относительные пути
-e VAR=valueenvironment: - VAR=valueСекреты лучше вынести в env_file или secrets
–name namecontainer_name: nameНеобязательно в Compose, но удобно
–restart norestart: “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 для переменных.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Как защитить телефон от слежки и перехвата
Безопасность

Как защитить телефон от слежки и перехвата

Тема и шрифт Блокнота в Windows 11
Windows

Тема и шрифт Блокнота в Windows 11

Microsoft Defender: как анализировать и удалять угрозы
Безопасность Windows

Microsoft Defender: как анализировать и удалять угрозы

Adobe Animate: руководство для начинающих
Анимация

Adobe Animate: руководство для начинающих

Mission DALEK: как создать свой эпизод Doctor Who
Развлечения

Mission DALEK: как создать свой эпизод Doctor Who

Обновление приложений в Windows 11 — руководство
Windows

Обновление приложений в Windows 11 — руководство