是否有可能将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