2014-10-16 6 views
2

Я хотел бы создать процедуру с помощью docker-py для запуска нескольких команд внутри контейнера Docker. Чтение документации, я обнаружил, что я могу использовать команду опции при создании container..something вроде этого:Выполнение нескольких команд в одном контейнере с помощью docker-py

c.create_container(image="myimage", command="mycommand") 

Есть ли способ запускать другие команды на только что созданный контейнер?

Спасибо!

ответ

0

Использование докер-ру или не контейнер может только запустить один процесс. Однако этот процесс может быть сценарием или программой, которая порождает несколько других процессов.

Посмотрите на статью Докера на how to supervisor with Docker, чтобы запустить несколько процессов в контейнере.

0

Я не думаю, что это возможно с помощью docker-py, но есть несколько способов сделать это, в зависимости от команды, которую вы хотите запустить.

Возможность установить command1 && command2 в качестве аргумента команды, а вторая начнется только тогда, когда первый закончит (так что, если он никогда не длится, вторая команда никогда не запустится ...). Другим вариантом является запуск Баш в контейнере, а затем выполнить команды на него через синтаксис:

echo your_command | docker attach container_id 

из командной строки хоста.

+0

См. Docker-exechttps: //docs.docker.com/reference/commandline/cli/#exec –

1

От докера v1.3. можно добавить новые процессы в запущенный контейнер с помощью команды docker-exec (см. https://docs.docker.com/reference/commandline/cli/#exec).

Однако вы должны учитывать недостатки запуска многопроцессорных контейнеров, «разделение, если есть проблемы» (обсуждается во многих статьях в Интернете).

0

Вы можете сделать это, используя список для параметра команды вместо строки. Кроме того, вы должны использовать sh -c выполнять ваши команды:

c.create_container(image="myimage", command=['sh','-c','ls | wc && date']) 

Вы все еще работаете только одна команды (оболочка), но вы предоставляете скрипт в качестве аргумента строки через параметр -c оболочки. И внутри этого сценария оболочки вы можете делать все, что захотите.