为什么执行 "docker exec" 会终止我的 SSH 会话?

Why is executing "docker exec" killing my SSH session?

假设我有两台服务器,AB。我还有一个在服务器 A 上执行的 bash 脚本,如下所示:

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 testhi! 之后输出,但事实并非如此。我该如何解决这个问题?

docker 正在使用(但不使用)它从 test.sh 继承的标准输入。 test.shbash 继承其标准输入,bashssh 继承其标准输入。这意味着 docker 本身在远程 shell 可以之前读取脚本的最后一行。

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

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