我有一个在 docker 容器中运行的鱿鱼代理,像这样开始:
docker run --privileged -d --publish=3128:3128 --name foo squid
我想从另一个名为 的容器中获取一些信息bar
。
docker run --rm -it --name bar ubuntu:trusty bash
如果我在bar
容器中运行它:
nc 172.17.0.1 3128
HEAD /
然后我从服务器获得一些输出。但如果我运行这个:
echo 'HEAD /' | nc 172.17.0.1 3128
我什么也没得到。为什么不?
答案1
可能是因为 netcat 在其标准输入上收到文件结尾后不久就退出了。尝试
(echo 'HEAD /'; sleep 5) | nc 172.17.0.1 3128
保持 netcat 的本地输入打开足够长的时间,以便它读取网络数据并将其写入标准输出。这5
是延迟的秒数。
Netcat 有一个选项可以解决这个问题。如果指定负退出超时,它将等待网络连接关闭,而不是在 stdin 上的 EOF 后退出:
echo 'HEAD /' | nc -q -1 172.17.0.1 3128