Почему выполнение "docker exec" убивает мою сессию SSH?
Допустим, у меня есть два сервера, A
а также B
, у меня тоже есть bash
скрипт, который выполняется на сервере A
это выглядит так:
build_test.sh
#!/bin/bash
ssh user@B <<'ENDSSH'
echo "doing test"
bash -ex test.sh
echo "completed test"
ENDSSH
test.sh
#!/bin/bash
docker exec -i my_container /bin/bash -c "echo hi!"
Проблема в том, что completed test
не печатается на терминал.
Вот результат бега build_test.sh
:
$ ./build_test
doing test
+ docker exec -i my_container /bin/bash -c "echo hi!"
hi!
Я ожидаю completed test
выводиться после hi!
, но это не так. Как это исправить?
1 ответ
Решение
docker
потребляет, хотя и не использует, свой стандартный ввод, который он наследует от test.sh
, test.sh
наследует свой стандартный ввод от bash
, который наследует свой стандартный ввод от ssh
, Это означает, что docker
Сам читает последнюю строку скрипта, прежде чем удаленная оболочка сможет.
Чтобы исправить, просто перенаправьте стандартный ввод докера из /dev/null
,
docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null