Docker は、多くの開発者やシステム管理者にとって一般的な仮想化ツールです。多くのアプリケーションを 1 つのコンテナにパッケージ化し、変更せずにすべてのプラットフォームで実行できます。ただし、一部のアプリケーション シナリオでは、ユーザーはシリアル ポートまたはシリアル デバイスを使用する必要がありますが、Docker はシリアル ポートを仮想化できますか?
Linux オペレーティング システムでは、シリアル ポート デバイスは /dev/ttyS0 ~ /dev/ttyS3 デバイス ファイルで表されます。プリンタ、モデム、デジタル メーターなどのデバイスの接続に使用できます。シリアル ポートは、シンプルで信頼性の高い通信方法です。ただし、Docker 内では、Docker コンテナには独自の物理ハードウェア デバイスがないため、デフォルトでは物理シリアル ポート デバイスを使用できません。
ただし、Docker は、ホスト上の仮想デバイスまたは物理デバイスを Docker コンテナ内にマッピングできる「デバイス マッピング」と呼ばれるメカニズムを提供します。この場合、ホスト マシン上のシリアル デバイスを Docker コンテナにマッピングすることで、シリアル通信をシミュレートできます。
Docker コンテナを起動するときに、「--device」オプションを追加することでデバイス マッピングを実現できます。たとえば、次のコマンドは、/dev/ttyUSB0 デバイスを Docker コンテナの /dev/ttyUSB0 デバイス ファイルにマップします。
$ sudo docker run -it --name mycontainer --device=/dev/ttyUSB0 ubuntu:latest
コンテナを起動した後、コンテナ内で次のコマンドを実行して、シリアル ポートが正しく設定されていることを確認します。コンテナ内で利用可能:
$ ls -l /dev/ttyUSB0
Docker コンテナ内で次のコマンドを実行すると、シリアル デバイスを開こうとします:
$ minicom -D /dev/ttyUSB0
ホストにシリアル ポート ドライバをインストールしない場合、コンテナはデバイスにアクセスできなくなります。したがって、コンテナーを起動する前に、必要なドライバーをインストールしてください。
また、デバイス マッピングを使用して Docker コンテナーでシリアル ポートを使用することは可能ですが、複数のシリアル デバイスを同時に接続する必要がある場合、デバイス マッピングは非常に困難になるため、これは理想的なソリューションではありません。この場合、より良い解決策は、仮想シリアル ポートを使用することです。
仮想シリアル ポートは、ホスト シリアル ポート デバイスを仮想シリアル ポート デバイスにマッピングすることによって、シリアル ポート通信をシミュレートする方法です。この仮想シリアル デバイスは実際のシリアル デバイスのように見えますが、実際にはホストにデータを送信するだけの実際のシリアル デバイスです。 Docker コンテナでは、socat や ttyd などのツールを使用して仮想シリアル デバイスを作成できます。
以下は、socat を使用して仮想シリアル ポート デバイスを作成するコマンドです:
$ sudo socat pty,link=/dev/ttyS0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0
このコマンドを実行すると、socat は 2 つの仮想シリアル ポート デバイス /dev/ttyS0 および /dev/ を作成します。 ttyS1。シリアル通信をシミュレートするために使用できます。
次に、次のコマンドを使用して、Docker コンテナーの起動時に仮想シリアル ポートをコンテナーにマップします。
$ sudo docker run -it --name mycontainer -v /dev/ttyS0:/dev/ttyS0 ubuntu:latest
コンテナー内で、/dev/ttyS0 デバイスを開いてみることができます。シリアル通信。
概要
Docker はデフォルトではシリアル デバイスをサポートしていませんが、デバイス マッピングまたは仮想シリアル デバイスを使用してシリアル通信をシミュレートできます。ソリューションを選択する際は、複数のシリアル デバイスを接続する場合、デバイス マッピングが非常に面倒になる可能性があることに注意してください。一方、仮想シリアル ポートを使用すると、複数のシリアル ポート接続を簡単に実現できます。
以上がDocker仮想シリアルポートはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。