docker - 在没有 docker exec 的情况下使用 attach 将命令发送到正在运行的容器
问题描述
我有一个循环进程在接受键入命令的 docker 容器中运行。目前我必须使用docker attach <container>
然后键入我的命令,例如restart
在退出之前。
据我所知,我不能使用docker exec
我想与之交互的进程已经在运行,所以无论如何我可以以编程方式将命令传递给docker attach
?
编辑:这是正在运行的程序内部的命令,而不是 shell 可用的命令
解决方案
一个解决方案可能是使用类似的东西:
echo "your input here" | docker attach <your container>
但是...这要求不要使用-t
可能导致其他问题的选项...
检查此问题:将标准输入重定向到docker attach
Michael Crosby 提供示例的位置:
此问题已得到解决。
docker run -i busybox sh -c "while true; do cat /dev/stdin; sleep 1; done;" test # ... from another terminal echo test | docker attach 27f04f3fd73a
这里需要注意的是,当你使用option运行容器时它不起作用。--tty , -t (Allocate a pseudo-TTY)
我还没有完全理解为什么会发生这种情况,所以我不会尝试解释它,这里已经写了一些东西:Confused about Docker -t option to Allocate a pseudo-TTY
此外,从docker run
参考:
对于交互式进程(如shell),您必须
-i
-t
一起使用才能为容器进程分配一个tty。正如您将在后面的示例中看到的那样,-i
-t
通常会这样写。当客户端从管道接收其标准输入时,禁止指定,如下所示:-it
-t
$ echo test | docker run -i busybox cat