Armadilloフォーラム

add_args --net=host設定をしたコンテナの他コンテナからのデータ送受信について

ishiz_iwy

2024年4月17日 10時18分

コンテナにてCANサーボを使用するため、add_args --net=hostの設定を追加しております。
その際、Bridge(podman0)を使用し動作している他コンテナから本コンテナへ通信(UDP)を行うことは可能でしょうか。
ncコマンドにて他コンテナの指定ポートへデータが送信可能なことは確認できましたが、本コンテナ(宛先10.88.0.1:xxxxx)では他コンテナからのデータを受信出来ませんでした。
標準から追加で必要なネットワーク設定などありましたらご教示いただけると幸いです。
よろしくお願いいたします。

コメント

at_reika.yamazaki

2024年4月17日 14時44分

お世話になっております。
山崎です。

podman0 を使用して本コンテナと他コンテナで UDP 通信したいということですね。
コンテナのネットワークについては以下という認識ですがあっているでしょうか?

・本コンテナ
add_args --net=hostの設定なし
・他コンテナ
add_args --net=hostの設定を追加

認識が誤りでしたら申し訳ありません。
上記の場合ですと、本コンテナの設定ファイルに UDP 用のポート設定を追加すると良いのではと思います。

例) add_ports 50000:50000/udp

実際は使用するポート番号を設定してください。

以下に2つのコンテナを使って UDP 通信を確認した例を載せます。
参考になりましたら幸いです。

・本コンテナの起動

cat udp_server.conf
--
set_image docker.io/alpine
add_ports 50000:50000/udp  ★ UDP 用のポート(50000)を設定
set_command nc -lu -p 50000 // 50000 で受信
--
podman_start udp_server

本コンテナを動かしておきます。

・他コンテナを起動

cat udp_client.conf
--
set_image docker.io/alpine
add_args --net=host
set_command sleep infinity
--
podman_start udp_server

・送受信確認

podman exec -it udp_client /bin/sh // コンテナに入ります
nc -u 10.88.0.1 50000  // podman0 を指定します
hello // 文字を送信します。適当に文字を入力して抜けます
 
podman logs udp_server
hello // 受信した文字列が表示されます

認識に誤り等ありましたらご指摘ください。
以上、どうぞよろしくお願いいたします。

回答ありがとうございます。

> ・本コンテナ
> add_args --net=hostの設定なし
> ・他コンテナ
> add_args --net=hostの設定を追加

説明がわかりにくく申し訳ありません。逆になります。
コンテナ①:add_args --net=hostを設定
コンテナ②:add_args --net=hostの設定なし
このとき、①⇒②へデータ転送ができることは確認していますが、②⇒①へのデータ転送が出来ない状況です。

at_reika.yamazaki

2024年4月17日 16時37分

お世話になっております。
山崎です。

逆ということで了解です。
でしたら、特に追加の設定は必要ないと思います。
本コンテナは add_args --net=hostを設定済 とのことなので、
ホストのネットワークがそのまま本コンテナにわたっています。

以下のコマンドで、他コンテナからホストのポートを指定可能です。

nc -u host.containers.internal 50000

お使いのポート番号に変更して、ご確認いただけますと幸いです。
以上、どうぞよろしくお願いいたします。

ご回答ありがとうございます。
コンテナ②にてhost.containers.internal宛(/etc/hostsにて10.88.0.1の記載有り)に送信をしていますが、以下コマンドでコンテナ①およびホスト側で受信が確認できない状態です。

nc -ul  50000

--net=hostの指定がないpodman0ブリッジを使用しているコンテナへの送信できています。

at_reika.yamazaki

2024年4月18日 11時42分

山崎です。

2点確認です。

1. コンテナ②から host.containers.internal 宛の ping は確認できているでしょうか?
問題なければ以下のような結果になると思います。

# ping -c 3 host.containers.internal
PING host.containers.internal (10.88.0.1): 56 data bytes
64 bytes from 10.88.0.1: seq=0 ttl=42 time=0.720 ms
64 bytes from 10.88.0.1: seq=1 ttl=42 time=0.476 ms
64 bytes from 10.88.0.1: seq=2 ttl=42 time=0.483 ms

2. コンテナ②の /etc/hosts の内容はどうなっているでしょうか?
「/etc/hostsにて10.88.0.1の記載有り」とご連絡いただけていることから、
以下のような内容かと思うのですが、異なるでしょうか?

# cat /etc/hosts
127.0.0.1       localhost localhost.localdomain
::1     localhost localhost.localdomain
10.88.0.1       host.containers.internal host.docker.internal
10.88.0.4       d93a9ff72e48 udp_client

ご確認いただけますと幸いです。
もし上記も問題ない場合は、再現確認のため、
再現に必要なコンテナ①、②の設定内容を教えていただけると助かります。
以上、どうぞよろしくお願いいたします。

ご返信ありがとうございます。

> 1. コンテナ②から host.containers.internal 宛の ping は確認できているでしょうか?
コンテナ内にnet-toolsをインストールしていなかったため確認出来ていませんでしたが、追加しpingを実行したところ疎通を確認できました。
また、恥ずかしながらncコマンド実行時に-pオプションを付け忘れており、つけたところ受信を確認できました。お手数をおかけいたしました。

nc -ulp 50000

at_reika.yamazaki

2024年4月18日 16時23分

山崎です。

無事に受信が確認できたということで良かったです。
ご連絡ありがとうございます。