2015-07-23 8 views
38

Я новичок в технологии Докер, я пытаюсь создать скрипт для создания Docker контейнера, мой файл сценария выглядит следующим образомЗапуск сценария внутри Docker контейнера с помощью оболочки сценария

#!bin/bash 

docker run -t -i -p 5902:5902 --name "mycontainer" --privileged myImage:new /bin/bash 

Запуск этого файл сценария будет запускать контейнер в недавно вызванном bash.

Теперь мне нужно запустить файл сценария (test.sh), который уже находится внутри контейнера из приведенного выше сценария оболочки. (Например: кд /path/to/test.sh & & ./test.sh) Как это сделать, пожалуйста, не стесняйтесь спрашивать, не является ли сценарий непонятным.

+1

Почему бы не использовать '' WORKDIR' и CMD'? – Dharmit

ответ

45

Вы можете запустить команду в запущенном контейнере с помощью docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:

docker exec mycontainer /path/to/test.sh 

И бежать от Баш сессии:

docker exec -it mycontainer /bin/bash 

И оттуда вы можете запустить сценарий или любой другой.

+1

Что делать, если мне нужно сначала войти в/bin/bash, а затем запустить команду внутри этого bash? – zappy

+1

Я имею в виду, что мне нужно выполнить 2 или более команды последовательно .... – zappy

+0

Отредактировано командой для запуска интерактивной оболочки –

48

Предполагая, что ваш докер контейнер и работает, вы можете запускать команды, как:

docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn" 
+1

Мне нравится этот ответ; вам не нужно входить в контейнер докера для выполнения команды или набора команд. Спасибо! –

+0

Знаете ли вы, как сделать этот шаг дальше и передать всю команду ('/ bin/sh -c" cmd1; cmd2; ...; cmdn "') в качестве значения переменной оболочки? Я спрашиваю, потому что «запуск докеров», похоже, ожидает одиночную команду и отдельные аргументы без кавычек, а не кавычки. – meowsqueak

+0

@meowsqueak http://stackoverflow.com/a/43019719/1663462 –

5

Я искал ответ на этот же вопрос и нашел ENTRYPOINT в решении Dockerfile для меня.

Dockerfile

... 
ENTRYPOINT /my-script.sh ; /my-script2.sh ; /bin/bash 

Теперь скрипты выполняются, когда я начинаю контейнер, и я получаю Баш приглашение после сценариев было выполнено.

0

Если вы хотите, чтобы выполнить ту же команду на нескольких случаях вы можете сделать это:

for i in c1 dm1 dm2 ds1 ds2 gtm_m gtm_sl; do docker exec -it $i /bin/bash -c "service sshd start"; done 
Смежные вопросы