Почему выполнение "docker exec" убивает мою сессию SSH? - PullRequest
1 голос
/ 19 апреля 2019

Допустим, у меня есть два сервера, 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 Ответ

2 голосов
/ 19 апреля 2019

docker потребляет, хотя и не использует, свой стандартный ввод, который он наследует от test.sh. test.sh наследует свой стандартный ввод от bash, который наследует свой стандартный ввод от ssh. Это означает, что docker сам читает последнюю строку скрипта, прежде чем удаленная оболочка сможет.

Чтобы исправить, просто перенаправьте стандартный ввод докера с /dev/null.

docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null
...