シェル環境でTCPを介して文字列を送信するには、次のようにします。
echo text | nc 1.2.3.4 9876
クール。インタラクティブには機能します。別のプログラムでサブプロセスを作成してプログラムでこれを実行したいので、シェルとパイプを使用したくないと思います。
また配布中なのでDistroのないDockerコンテナ、殻がありません。
TCPを介してコマンドパラメータを文字列として送信できる既存のツールはありますか?私が探している(仮想)バリアントですnc
。例:
nc 1.2.3.4 9876 text
その機能は次のとおりです。
echo text | nc 1.2.3.4 9876
(出力も必要です。)
私はこれのために私自身のアプリケーションを書こうとしますが、それがすでに存在し、stdinの代わりにargvの1つに渡されることを想像できます。
これを見ると、socat
ファイルから読み取ることがOPEN
できます。これは私が望むものと非常に似ていますが、実行するコマンドの引数として文字列を渡す必要があります。
完全なコンテキストでは、Dockerコンテナのエントリポイントは、シェルや他の解釈された言語なしでglibc(socat / ncに似ています)などの純粋なOSのデフォルトの依存関係を使用して設定可能でなければなりません。
答え1
パラメータを受け入れてTCP接続を介して送信するプログラムがわかりません。
しかし、あなたはコメント、特に次の行であなたの質問に答えました。
ENTRYPOINT ["/bin/sh", "-c", "mycommand"]
画像から最小限のアプリケーションスペースが欲しいと思いますが、最高の解決策は元のコマンドを使用することshell
ですnetcat
。まあ、少なくともあなたがしたいことをテストしてください。
結局のところ、単一の実行可能ファイルに戻るには、それを実行するプログラムを直接作成する必要があります。
アイデア、わかりましたこの例、スクリプトを実行するためのPython設定の表示、
FROM python:2.7-slim AS build-env
ADD . /app
WORKDIR /app
FROM gcr.io/distroless/python2.7
COPY --from=build-env /app /app
WORKDIR /app
CMD ["hello.py", "/etc"]
C
これはすべてのタスクを実行するプログラムを開発するよりも簡単で高速ですが、実際にはPythonを次のように使用しています。シェル。最後に、socat
必要なことができると思われる場合は、socat
ファイル(画像に含まれている)で読み取りを使用でき、そのファイルにはテキスト文字列が含まれています。
答え2
newlisp
たとえば、を使用できると思います。
newlisp -e '(write-line (net-connect "localhost" 3456) "go for it")'
必要に応じてパラメータを変更します。
サイズが小さく、静的プログラムにコンパイルされてperl
も、他のインタプリタを使用することができると確信しています。newlisp
上記の例では、プログラムはlocalhost
ポートに接続され、ソケットにラインを発行して3456
から終了します。go for it
移動ニューリースホームページ詳細については。
答え3
私は必要な機能を実装するために小さなアプリを自分で書いた。パラメータを読み取り、ソケットに書き込みます。残念ながら、まだ存在していませんが、nc
同じツールではより複雑な機能しか使用できませんsocat
。たぶん、パラメータの入力を受け入れるパッチを書くことができますnc
。
コメントに答える - 完全なシェルを含み、ここでサブプロセスを作成することが新しい標準であることを読んだのは少し悲しいことです。純粋なオーバーヘッドは必要ありません。