例如,我在cat
Dockerfile选项中定义了CMD
(或使用stdin的其他进程)运行的docker容器。
我尝试将字符串test\n
发送到正在运行的cat
(或其他进程)。
是否可以这样做,或者我需要找到解决方法?
总结:
我正在寻找类似的东西
echo 'test' | docker run -i --rm alpine command
用于运行容器。
答案 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
$ tail -f /opt/wso2esb01a/repository/logs/wso2carbon.log > /dev/tcp/192.168.99.100/8182
或将跟踪发送到没有netcat
$ tail -f /opt/wso2am02a/repository/logs/wso2carbon.log > /dev/udp/192.168.99.100/9192