Dockerコンテナ間の仮想シリアルポート

Dockerコンテナ間の仮想シリアルポート

Linuxシステムで2つのリンクを生成する仮想シリアルポートを使用すると、一方の端はシリアルデバイスで、socatもう一方の端はそのデバイスを使用するコードであるかのように偽装できます。コマンドsocatは次のとおりです。

socat -d -d pty,raw,echo=1 pty,raw,echo=0

システムに、/dev/pts/3などの2つのポートを作成します/dev/pts/4

もう一歩進んで、システムを表す2つのドッカーコンテナを持ちたいです。 1つはシリアルデバイスであるふりをし、もう1つはコンテナを使用するコードです。目的は、本番環境から仮想デバイスコンテナを削除し、実際のセンサーのみを使用できることです。

問題は、2つのコンテナ間で共有する方法が見つからないようで、devptsなぜかこれが悪いような気がします。

ptyの代わりに名前付きパイプを使用してまったく同じ動作(仮想シリアルポート)を達成する方法はありますか?その後、コンテナ間でファイル(「/home/user/folder/my_pipe」など)を共有できます。実際には、両方のコンテナに「/home/user/folder」をマウントすると、両方のコンテナにアクセスできますmy_pipe

それとも、dockerを使ってこれらすべてを行うもう一つの良い方法はありますか?

ベストアンサー1

(ところで、「仮想シリアルポート」はWindowsの用語です。Unixではこれらを「(擬似)ttys」といいます。)

ctrl-alt-delorの意味は、socat「シリアルデバイスコンテナ」で1つの操作を実行でき、そのデバイスをsocat使用する「コードコンテナ」で1つのタスクを実行できることです。したがって、1つのコンテナは次のことを知る必要があります。他のコンテナのIPアドレスとポートはすべてです(どのコンテナが別のコンテナに接続するかを選択できます)。さらに、「コードコンテナ」で実行されるコードはttyのみを使用するため、ttyへのパス(引数/コマンドラインパラメータなどでなければならない)以外のものにも依存しません。

呼び出しの詳細は、socat実行したい他の詳細に依存し、tcp-listen最もtcp単純なバリエーションです。socatなどの例が多い。ここ

編集する

名前の説明: A端末(テレタイプ)は、特定のシリアルポートパラメータの抽象化だけでなく、文字(行末など)やその他の点(行規則など)の翻訳と解釈です。擬似端末は、実際のハードウェアがない端末です。 ttyは、ioctlsがこれらすべてのパラメータを設定できる点でファイルとは異なります。

そのため、プログラムにボーレート設定などの機能がある場合はttyが必要です。そうでない場合は、名前付きパイプを使用することもできます。

ただし、名前付きパイプまたはttyを使用してコンテナ間で共有する場合には違いはありません。どちらかを入れることができるどこかに共通のファイルシステムを設定する必要があります。これは必ずしも(ドッカー)コンテナが一般的に機能する方法ではありません。

OTOH、(docker)コンテナは通常ネットワーキングの準備ができています。したがって、共有ファイルシステムを持つよりも、ネットワークを介してコンテナを接続する方が簡単です。また、コンテナが同じホストで実行される必要がないという利点もあります(ドッカーコンテナはこれを実行しません)。だからもっと自然な選択でした。

もちろん、好きなようにできます。

おすすめ記事