У меня есть модуль, развернутый на Raspberry Pi, на котором работает Azure IoT Edge. Модуль представляет собой приложение Node-RED, которое хочет взаимодействовать с gpiod
. Модуль (конечно) является контейнерным приложением, и на хосте запущено gpiod
.
Все работает как «по умолчанию», поэтому Модуль работает как --network="bridge"
, поэтому, чтобы выяснить, чтоIP, который я должен использовать, чтобы получить от Модуля (контейнера) к хосту, я сделал:
sudo docker exec hub-nodered route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.18.0.1 0.0.0.0 UG 0 0 0 eth0
172.18.0.0 * 255.255.0.0 U 0 0 0 eth0
И используя 172.18.0.1:8888
, все работает!
За исключением примерно через 35 секунд после того, как я отправил 1
или 0
на вывод GPIO, у меня появляется , чтобы потерять доступ к сети хоста, и Node-RED сообщает ETIMEDOUT 172.17.42.1:8888
.
Я понятия не имею, откуда 172.17.42.1
приходит из подсети docker0
:
$ sudo ip addr show docker0
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:94:f2:b2:ca brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet 169.254.251.36/16 brd 169.254.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::3bea:3383:36b7:fbd7/64 scope link
valid_lft forever preferred_lft forever
Если я ничего не изменю и продолжу и отправлю еще один 1
или 0
до 172.18.0.1:8888
, это все еще работает! Но через некоторое время у меня снова появится возможность потерять доступ к 172.18.0.1
и увидеть ошибку ETIMEDOUT 172.17.42.1:8888
.
Использование docker0
172.17.0.1
делает точно то же самое.
host.docker.internal
еще не работает в Linux .
Периодически ли Azure IoT Edge сбрасывает сеть системы, так что я ненадолго теряю доступ к IP-адресу хоста?
Есть ли какой-то другой способ, которым я должен выйти из моего модуля на хост?