От команды запуска к конфигурации

Из docker run в Compose

Сохраните параметры запуска в понятном YAML, чтобы не восстанавливать их по истории терминала. Конвертер перенесёт настройки и покажет, что проверить перед запуском Compose.

docker runcompose.yaml
Преобразование в браузере
01

Вставьте одну команду. Поддерживаются кавычки и продолжение строк через обратную косую черту. Результат обновляется при вводе.

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

Параметров: 5 · Сервисов: 1YAML

Перед запуском

  • Фоновый режим выбирается при запуске: docker compose up -d.
  • Относительные пути отсчитываются от compose.yaml. Проверьте расположение файла или используйте абсолютные пути.
  • network_mode: bridge сохраняет сеть docker run по умолчанию. Уберите поле, чтобы Compose создал сеть проекта.
Проверить локальноdocker compose config

Без регистрации и выполнения команд. Ввод обрабатывается в браузере.

Когда команда запуска становится частью проекта

Для разового теста удобно выполнить docker run. Но при повторном развёртывании важно не забыть каталог с данными, порт или переменную. В compose.yaml эти настройки разнесены по полям: их проще проверить, сохранить в Git и передать вместе с проектом.

Конвертер создаёт один сервис из одной команды. Он не считывает настройки работающих контейнеров, не меняет их состояние и не определяет зависимости между сервисами. Полученный файл нужно проверить в той среде, где он будет использоваться.

Как не подключить пустой том вместо существующего

Именованный том сохраняет исходное имя и объявляется с external: true. Это позволяет обратиться к существующему тому, а не создать новый с префиксом проекта Compose. Для новой установки заранее создайте том или уберите признак внешнего ресурса. Данные при преобразовании не копируются.

Относительные пути привязаны к каталогу файла Compose. Пользовательская сеть также считается внешней и должна существовать. Если сеть не указана, сохраняется network_mode: bridge. Удалите это поле, если хотите использовать сеть проекта Compose с обращением к сервисам по именам.

Порядок преобразования и проверки

Вставьте команду с docker run или docker container run. Сохраняйте кавычки и символы продолжения строк. Необязательное имя сервиса меняет ключ в services, но значение --name остаётся в container_name.

Прочитайте примечания, скачайте или скопируйте YAML и проверьте пути к каталогам и файлам. Выполните docker compose config. Постоянно работающий сервис можно запустить через docker compose up -d; для разовой задачи с --rm используется другой способ запуска.

Пример с Nginx: порты и перезапуск

Порт 8080 хоста направляется на порт 80 контейнера. Политика unless-stopped переносится в YAML, а -d остаётся выбором режима запуска Compose, а не полем сервиса.

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

Переменные оболочки нужно раскрыть заранее

Поддерживается синтаксис POSIX: кавычки, экранирование и продолжение строк. PowerShell, CMD, конвейеры, несколько команд и глобальные параметры Docker не поддерживаются. Замените переменные и $(pwd) конкретными значениями. Литеральный знак доллара защитите одинарными кавычками или экранированием; в Compose он сохраняется как $$.

Для --env-file используется format: raw, требующий Docker Compose 2.30.0 или новее. Содержимое файлов, образы и занятость портов не проверяются. Успешная проверка конфигурации ещё не гарантирует запуск приложения.

Соответствие параметров Docker полям Compose

Параметр DockerПоле ComposeНазначение
IMAGEimageСохраняются образ и тег
--namecontainer_nameЯвно заданное имя контейнера
-p, --publishportsПорты хоста и контейнера
-e, --envenvironmentЗначения без присваивания берутся из среды запуска
-v, --volume / --mountvolumesПривязка каталогов, именованные и анонимные тома
--networknetworks / network_modeИмя сети или сетевой режим
--restartrestartПолитика перезапуска
IMAGE [COMMAND] [ARG…]commandАргументы сохраняются списком

Вопросы о переносе в Compose

Почему нет поля version?

Файл соответствует Compose Specification и начинается с services. Устаревшее поле version не добавляется. Для проверки используйте современную команду docker compose.

Чем заменить --rm?

Разовую задачу запускайте через docker compose run --rm --service-ports SERVICE, заменив SERVICE именем сервиса. Параметр --service-ports включает публикацию портов из файла.

Что будет с неподдерживаемым параметром?

Преобразование остановится. Например, --gpus, --link и некоторые расширенные параметры монтирования требуют ручной настройки. Они не исчезнут из конфигурации незаметно.

Можно ли объединить несколько команд?

Преобразуйте их отдельно, затем объедините определения сервисов. Общие тома, сети и зависимости нужно согласовать вручную.

Отправляются ли пароли на сервер?

Введённая команда обрабатывается в браузере и не загружается на сервер. Однако её значения остаются в полученном файле, поэтому проверьте его перед публикацией в репозитории.

Будет ли заменён работающий контейнер?

Само преобразование ничего не выполняет в Docker. Перед запуском Compose устраните конфликты с уже занятыми именами контейнеров и портами.

Официальная документация Docker: docker run · Compose · $$