我正在尝试分离并重新连接到以前台模式启动的 Docker 容器docker run
。我看到的问题是,在初始分离期间,Docker 意外关闭了 STDIN。
以下是示例脚本:
/tmp/echo.sh
#!/bin/bash
while read line
do
echo "Received: $line"
done < "${1:-/dev/stdin}"
echo "STDIN closed"
while [ 1 ]; do
echo "Still alive"
done
因此理论上我会这样做:
# docker run -i --sig-proxy=false --name=test --volume=/tmp:/tmp debian /tmp/echo.sh
然后按 CTRL+C 结束docker run
命令(不转发 INT 信号),然后:
# docker attach --sig-proxy=false test
我看到的问题是关闭docker run
命令也会关闭 STDIN。容器继续运行,并且在使用docker attach
它时只会发送垃圾邮件Still alive
。
但是,如果我运行以下命令,则 STDIN 将保持打开:
docker run -di --sig-proxy=false --name=test --volume=/tmp:/tmp debian /tmp/echo.sh
然后我可以docker attach
按预期使用,docker attach
使用 CTRL+C 关闭该进程,然后再次运行它,同时 STDIN 始终保持打开状态。
如何docker run
在不关闭 STDIN 且不以分离模式启动的情况下关闭初始命令?