为什么执行“ docker exec”会杀死我的SSH会话?

时间:2019-04-19 17:34:24

标签: bash docker ssh docker-exec

假设我有两个服务器,AB。我也有一个在服务器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 个答案:

答案 0 :(得分:2)

<h6 class="date">October 13, 2017</h6> <h3>Contact Mgmt. - C</h3> <div class="container p-0 m-0" onmouseover="showBTN()" onmouseout="removeBTN()"> <img src="https://picsum.photos/254/384?grayscale" style="border-radius: 10px;" /> <a id="butt" style="display: none;" href="https://github.com" class="btn btn-outline-success"> Github code </a> </div>正在使用(尽管未使用)其从docker继承的标准输入。 test.sh继承自test.sh的标准输入,而bash继承自ssh的标准输入。这意味着docker本身正在远程外壳程序之前读取脚本的最后一行。

要修复,只需从/dev/null重定向docker的标准输入即可。

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