воскресенье, 21 февраля 2021 г.

Нет подключения к контейнеру при автостарте с системой.

 Когда переводил influx базу данных в контейнерное иполнение, для работы с ней из Grafana, то словил неприятную особенность в настройке системы в контексте работы контейнеров с прокинутыми портами.

Проблема: После старта системы нет сетевого доступа к контейнеру. По всем параметрам контейнер запущен и порты указаны корректно, а соединения нет.

unable to connect to docker container

unable to connect to podman container

Соединение висит... 

В виду того, что я использую CentOS, вместо привычного всем docker здесь podman, но я думаю суть не меняется, хотя в контексте отсутствия демона, может быть проблема имеет место быть только на системах с podman.

Диагностика.

1. Посмотрим PID процессов systemctl status influxdb.service (это юнит запуска моего контейнера):

 

 PID podman 779

и посмотрим PID NetworkManager.service

$ systemctl status NetworkManager.service

 

Уже подозрительно, ведь podman использует свою внутреннюю сетку для общения хостовой системы с контейнерами

2. Посмотрим, что там с сетью 

$ip s a

 

интерфейс cni-podman0 с сетью 10.88.0.1/16

Самое интересное для меня было, то что сервис контейнера infuxdb  (podman, docker) нормально доступен если на уже загруженной системы выполнить рестарт контейнера! 

И тут я решил проверить, а что там в дампах до рестарта когда контейнер не доступен и что после рестарта. И вот что увидел:

 После перезагрузки системы, до рестарта контейнера, контейнер недоступен:

grafana настроена на общение с localhost, но так она до контейнера не доберется...

Рестартую контейнер и  вот что в дампе:

Обмен пошел по внутренней сетке podman, как положенно.

 Решение.

 Исходя из этого всего делаю вывод, что сервис influxdb грузился слишком рано, не давая стеку tcp/ip или networkmanager загрузится. Учтем этот момент в юнит файле:

/etc/systemd/system/influxdb.service


[Unit]
Description=Influxdb Podman container
After=NetworkManager.service
[Service]
Restart=always
ExecStart=/usr/bin/podman start -a influxdocker
ExecStop=/usr/bin/podman stop -t 10 influxdocker
[Install]
WantedBy=multi-user.target

Теперь контейнер стартует гарантирована после старта сетевого интерфейса podman и корректно работает даже при рестарте системы.



 

 

 


Комментариев нет:

Отправить комментарий