为什么执行 "docker exec" 会终止我的 SSH 会话?
Why is executing "docker exec" killing my SSH session?
假设我有两台服务器,A
和 B
。我还有一个在服务器 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 test
在 hi!
之后输出,但事实并非如此。我该如何解决这个问题?
docker
正在使用(但不使用)它从 test.sh
继承的标准输入。 test.sh
从 bash
继承其标准输入,bash
从 ssh
继承其标准输入。这意味着 docker
本身在远程 shell 可以之前读取脚本的最后一行。
要修复,只需将 docker 的标准输入从 /dev/null
重定向。
docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null
假设我有两台服务器,A
和 B
。我还有一个在服务器 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 test
在 hi!
之后输出,但事实并非如此。我该如何解决这个问题?
docker
正在使用(但不使用)它从 test.sh
继承的标准输入。 test.sh
从 bash
继承其标准输入,bash
从 ssh
继承其标准输入。这意味着 docker
本身在远程 shell 可以之前读取脚本的最后一行。
要修复,只需将 docker 的标准输入从 /dev/null
重定向。
docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null