Как воссоздать docker-compose?

Вопрос или проблема

Я удалил docker-compose, не отправив его в git… Я знаю, что я идиот. Стек все еще активен, так что есть ли способ восстановить этот docker-compose? Я могу выполнить docker inspect и увидеть все необходимые мне элементы, т.е. используемые тома, переменные и т.д., но если есть какой-то трюк, чтобы восстановить compose с минимальными усилиями, это было бы здорово.

Спасибо,

Сначала вам нужно получить эквивалентную команду docker run, вы можете использовать этот инструмент для этого: https://github.com/nexdrew/rekcod.

После того как у вас будет команда docker run, вы можете использовать этот другой инструмент, чтобы преобразовать её в файл docker-compose: https://composerize.com/.

Например:

У меня есть следующий файл docker-compose:

version: '2'
services:
  logstash:
    image: docker.elastic.co/logstash/logstash:5.6.3
    ports:
      - 9600:9600
    volumes:
      - ./pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      - ./config/:/usr/share/logstash/config

Я запускаю docker-compose up и в итоге получаю следующий контейнер:

$ docker ps

CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS                              NAMES
5febb7edb627        docker.elastic.co/logstash/logstash:5.6.3   "/usr/local/bin/dock…"   2 minutes ago       Up 2 minutes        5044/tcp, 0.0.0.0:9600->9600/tcp   logstash563_logstash_1

Затем я генерирую эквивалентную команду docker run для основного контейнера:

$ rekcod 5febb7edb627

docker run --name logstash563_logstash_1 -v /workplace/mariodes/docker/logstash/logstash-5.6.3/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw -v /workplace/mariodes/docker/logstash/logstash-5.6.3/config:/usr/share/logstash/config:rw -p 9600:9600/tcp --net logstash563_default --restart no -h 2392ddc1cea7 --expose 5044/tcp --expose 9600/tcp -e 'PATH=/usr/share/logstash/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'ELASTIC_CONTAINER=true' -e 'LANG=en_US.UTF-8' -e 'LC_ALL=en_US.UTF-8' -d --entrypoint "/usr/local/bin/docker-entrypoint" docker.elastic.co/logstash/logstash:5.6.3

Теперь скопируйте вывод из rekcod и используйте его на https://composerize.com/ для преобразования в файл docker-compose:

version: 3
services:
    logstash:
        container_name: logstash563_logstash_1
        volumes:
            - '/workplace/mariodes/docker/logstash/logstash-5.6.3/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw'
            - '/workplace/mariodes/docker/logstash/logstash-5.6.3/config:/usr/share/logstash/config:rw'
        ports:
            - '9600:9600/tcp'
        restart: no
        expose:
            - 5044/tcp
            - 9600/tcp
        environment:
            - 'PATH=/usr/share/logstash/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
            - ELASTIC_CONTAINER=true
            - LANG=en_US.UTF-8
            - LC_ALL=en_US.UTF-8
        entrypoint:
            - /usr/local/bin/docker-entrypoint
        image: 'docker.elastic.co/logstash/logstash:5.6.3'

Извините, что поднимаю эту тему, но я только что её нашел, и @Mario Souza нуждается в кофе или пиве или хотя бы в “Отлично! Приятная обратная разработка”.

Поскольку у его ответа всего 1/по умолчанию голос, и у меня нет достаточного авторитета, чтобы проголосовать.

С уважением, nOrphf

Ответ или решение

Для воссоздания файла docker-compose, который был случайно удален без предварительной отправки в git, но при этом контейнеры все еще работают, вы можете воспользоваться несколькими полезными инструментами и методами. Рассмотрим пошагово, как это сделать.

Шаг 1: Получение параметров запущенного контейнера

Первый шаг — это извлечение информации о работающем контейнере. Вы можете использовать команду docker ps для отображения всех активных контейнеров. Эта команда покажет вам идентификатор контейнера, имя, используемый образ и другие параметры.

docker ps

Определите CONTAINER ID нужного контейнера, чтобы просмотреть его детали.

Шаг 2: Использование docker inspect

Теперь, когда вы знаете CONTAINER ID, вы можете использовать команду docker inspect, чтобы получить полную информацию о контейнере. Эта информация включает в себя все используемые вами переменные окружения, порты, тома и параметры сети.

docker inspect <CONTAINER ID>

Ищите в выводе параметры в разделе HostConfig, Config, а также .Mounts для томов.

Шаг 3: Получение команды docker run

Для упрощения задачи можно использовать инструмент rekcod. Этот инструмент позволяет получить эквивалентную команду docker run для вашего контейнера.

Установите rekcod и выполните следующую команду, подставив CONTAINER ID:

rekcod <CONTAINER ID>

Вы получите результат в виде команды, которая описывает, как был запущен ваш контейнер, с указанием всех необходимых параметров.

Шаг 4: Конвертация в docker-compose

Как только вы получаете команду docker run, следующим шагом будет ее конвертация в формат docker-compose. Для этого прекрасно подойдет инструмент composerize.

Просто скопируйте команду, сгенерированную rekcod, и вставьте её на сайте composerize. Это преобразует параметры команды docker run в структуру файла docker-compose.

Пример

Допустим, вы получили следующую команду docker run:

docker run --name logstash563_logstash_1 -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -p 9600:9600 -e 'ENV_VAR=value' -d docker.elastic.co/logstash/logstash:5.6.3

После конверсии вы сможете получить следующий файл docker-compose.yml:

version: '3'
services:
  logstash:
    container_name: logstash563_logstash_1
    image: 'docker.elastic.co/logstash/logstash:5.6.3'
    ports:
      - '9600:9600'
    volumes:
      - '/path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf'
    environment:
      - 'ENV_VAR=value'

Заключение

Таким образом, процесс воссоздания файла docker-compose после его удаления можно сделать с помощью команд docker inspect и инструментов rekcod и composerize. Это не только спасает ваше время, но и предоставляет возможность восстановить конфигурацию, не теряя никаких важных параметров настройки. Следуйте этим шагам, и вы сможете быстро восстановить вашу инфраструктуру контейнеров.

Оцените материал
Добавить комментарий

Капча загружается...