是否可以将字符串发送到docker容器内的运行进程?

时间:2017-02-20 10:07:19

标签: linux docker

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

我尝试将字符串test\n发送到正在运行的cat(或其他进程)。

是否可以这样做,或者我需要找到解决方法?

总结: 我正在寻找类似的东西 echo 'test' | docker run -i --rm alpine command 用于运行容器。

3 个答案:

答案 0 :(得分:2)

如果您使用stdin启动容器,则可以导管到容器的-i进程。例如;

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

请记住,这是在启动容器时完成的。您的问题提到cat,这不是一个长时间运行的过程,因此容器将在cat完成后实际退出。

答案 1 :(得分:2)

我通过简单地将stdin连接到docker attach来解决它,例如:

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

在另一个词中

$ echo test | docker attach <containerId>

答案 2 :(得分:1)

是的例子见

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