【问题标题】:Why is executing "docker exec" killing my SSH session?为什么执行“docker exec”会杀死我的 SSH 会话?
【发布时间】:2019-04-19 17:34:24
【问题描述】:

假设我有两台服务器,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 可能正在消耗它从 ssh 继承的其余标准输入(这是您尝试运行的脚本)。
  • 如果是这样,有没有办法告诉 docker 不要那样做?
  • docker ... &lt; /dev/null.
  • 成功了!把它作为一个答案,我会接受的。
  • 您也可以删除-i 标志。

标签: bash docker ssh docker-exec


【解决方案1】:

docker 正在使用,虽然没有使用,它的标准输入,它继承自 test.shtest.shbash 继承其标准输入,bashssh 继承其标准输入。这意味着docker 本身正在读取脚本的最后一行,然后远程 shell 才能读取。

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

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

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多