Сценарий Python для запуска команд в контейнере Docker
В настоящее время я работаю над автоматизацией команд для контейнера Docker с помощью сценария Python на хост-машине. Этот скрипт Python на данный момент создает и запускает
docker-compose
файл с командами для контейнеров, записанными в
docker-compose
файл и
Dockerfile
сам.
Я хочу, чтобы все команды выполнялись в контейнере с помощью сценария Python, поэтому, если у меня есть разные сценарии, которые я хочу запустить, я не меняю контейнер. Я пробовал 2 способа.
Сначала было бежать
os.system()
внутри скрипта Python, однако это работает только при открытии оболочки для контейнера,
os.system()
команда не выполняет код в самом контейнере Docker.
Второй способ использует CMD внутри
Dockerfile
однако это ограничено и жестко запрограммировано в контейнере. Если у меня несколько скриптов, мне нужно изменить
Dockerfile
, Я не хочу этого. Я хочу создать контейнер по умолчанию со всеми запущенными службами, а затем запустить сценарии Python на хосте для выполнения последовательности команд в контейнере.
Я новичок в Docker и думаю, что я что-то упускаю из виду, чтобы запускать скриптовые команды в контейнере. Одно из возможных решений, с которыми я столкнулся, -
nsenter
. Это надежное решение и как оно работает? Или есть способ попроще? Я также использовал
docker-volume
чтобы скопировать файлы python в контейнер для запуска при сборке, однако я все еще не могу найти решение для автоматизации доступа и запуска этих сценариев python с хост-машины.
1 ответ
Если скрипты необходимо скопировать в работающий контейнер, вы можете сделать это через
docker cp
команда. например
docker cp myscript.sh mycontiainer:/working/dir
.
Как только скрипты окажутся в контейнере, вы можете запускать их через
docker exec
команда. например
docker exec -itmycontainer /working/dir/myscript.sh
.
Обратите внимание: это не обычная практика. Обычно требуемый сценарий (-ы) будет встроен (не скопирован) в образ (-а) контейнера. Затем, когда вы хотите выполнить скрипт (ы) в контейнере, вы должны запустить контейнер через
docker run
команда. например
docker run -itmycontainerimage /working/dir/myscript.sh