首页 > 解决方案 > 在没有 docker exec 的情况下使用 attach 将命令发送到正在运行的容器

问题描述

我有一个循环进程在接受键入命令的 docker 容器中运行。目前我必须使用docker attach <container>然后键入我的命令,例如restart在退出之前。

据我所知,我不能使用docker exec我想与之交互的进程已经在运行,所以无论如何我可以以编程方式将命令传递给docker attach

编辑:这是正在运行的程序内部的命令,而不是 shell 可用的命令

标签: docker

解决方案


一个解决方案可能是使用类似的东西:

echo "your input here" | docker attach <your container>

但是...这要求不要使用-t可能导致其他问题的选项...


检查此问题:将标准输入重定向到docker attachMichael 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

推荐阅读