2015-06-02 2 views
2

Я хочу настроить задание cron для запуска набора команд внутри контейнера докеров, а затем зафиксировать изменения изображения докеров. Я могу запустить контейнер в качестве демона и получить идентификатор контейнера с помощью этой команды:Как я могу запустить контейнер докеров и зафиксировать изменения после завершения скрипта?

CONTAINER_ID=$(sudo docker run -d my-image /bin/sh -c "sleep 10")

, но у меня возникают проблемы со второй частью - совершающего изменения в изображении, как только sleep 10 команда завершена. Есть ли способ, чтобы я мог сказать, когда контейнер докера будет убит и запустит еще одну команду до этого?

EDIT: В качестве альтернативы существует способ запускать ctrl-p-q через сценарий оболочки в контейнере, чтобы оставить контейнер запущенным, но вернуться к хосту?

ответ

3

Запустите его на переднем плане, а не как демон. Когда он заканчивает скрипт, который запускает его, он получает контроль и фиксирует/нажимает его

+0

Спасибо за ответ. Я все еще не могу зафиксировать, прежде чем контейнер будет убит. Есть ли способ запустить команду до ее уничтожения? Или есть способ отправить сигнал 'ctrl-p-q' из сценария оболочки, чтобы оставить контейнер, но вернуться на хост? – mrdziuban

+0

Контейнер заканчивается, но не удаляется, вы можете зафиксировать этот идентификатор контейнера с репозиторием или именем системы. – gmuslera

+0

Удивительный, спасибо! Я не знал, что вы можете сделать контейнер после его остановки. – mrdziuban

-1

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

#!/bin/bash 
for i in `docker ps|tail -n +2|awk '{print $1}'`; do docker commit -m "commit new change" $i; done 
5

Существуют следующие способы сохраняющегося контейнера данные:

  1. объемы Docker

  2. Docker совершить

    а) создать контейнер с изображения ubuntu и запустить терминал bash.

    $ docker run -i -t ubuntu:14.04 /bin/bash 
    

    б) Внутри терминала установить завиток

    # apt-get update 
        # apt-get install curl 
    

    с) Выход контейнерного терминала

    # exit 
    

    d) принять к сведению вашего идентификатора контейнера, выполнив следующую команду:

    $ docker ps -a 
    

    e) сохранить контейнер как новое изображение

    $ docker commit <container_id> new_image_name:tag_name(optional) 
    

    f) убедитесь, что вы видите свое новое изображение с установленным завитом.

    $ docker images   
    
        $ docker run -it new_image_name:tag_name bash 
         # which curl 
         /usr/bin/curl 
    
Смежные вопросы