是否有可能将string发送到Docker容器中正在运行的进程?

例如,我已经运行与CMD Dockerfile选项中定义的cat (或其他进程使用stdin)的docker容器。

我试图发送stringtest\n到运行cat (或其他进程)。

是否有可能做到这一点,或者我需要find解决办法?

总结一下:我正在寻找类似echo 'test' | docker run -i --rm alpine command echo 'test' | docker run -i --rm alpine command 运行容器。

如果使用-i启动容器,则可以将其传递到容器进程的stdin 。 例如;

 echo "foobar" | docker run -i --rm alpine cat 

请记住,这是在启动容器时完成的。 你的问题提到cat ,这不是一个漫长的过程,所以容器将实际上cat完成后退出。

我通过简单地将标准input到docker attach来解决它,例如:

$ docker run -i busybox sh -c "while true; do cat /dev/stdin; sleep 1; done;" test

并在另一个术语

$ echo test | docker attach <containerId>

是的,作为一个例子看

https://github.com/chilcano/docker-netcat

你需要打开一个端口,从上一个链接中提取

 $ docker run -d -t --name=netcat-jessie -p 8182:8182 -p 9192:9192/udp chilcano/netcat:jessie 

现在,你有一些使用这些端口发送跟踪来打开一个TCP端口的通信的例子

 $ ping 8.8.4.4 | nc -v 192.168.99.100 8182 

或将跟踪发送到UDP端口

 $ ping 8.8.8.8 | nc -vu 192.168.99.100 9192 

或者在没有netcat的情况下将跟踪发送到UDP端口

 $ ping 8.8.4.4 > /dev/udp/192.168.99.100/9192 

 $ tail -f /opt/wiremock/wiremock.log | nc -vu 192.168.99.100 9192 

或者在没有netcat情况下将跟踪发送到TCP端口

 $ tail -f /opt/wso2esb01a/repository/logs/wso2carbon.log > /dev/tcp/192.168.99.100/8182 

或者在没有netcat情况下将跟踪发送到UDP端口

 $ tail -f /opt/wso2am02a/repository/logs/wso2carbon.log > /dev/udp/192.168.99.100/9192