パイプ経由でnetcatに接続できません

パイプ経由でnetcatに接続できません

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

関連情報