Почему выполнение "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
Другие вопросы по тегам