Назад | Перейти на главную страницу

Контейнер докера (mysqld-exporter) не может получить доступ к другому контейнеру докера (mysql) на одном сервере

В моей (упрощенной) настройке у меня есть 2 сервера, A и B (и другие, которые ведут себя как B), и моя локальная машина. На каждом из серверов по mysql-база данных и mysqld-exporter prometheus-exporter должен работать как докер-контейнеры. Контейнеры не связаны, но обмениваются данными через сеть через открытый порт.

Серверы управляются с помощью инструмента и, следовательно, содержат одни и те же версии программ с одинаковыми конфигурациями, такими как порты, сетевое имя докера. Разница заключается в именах хостов, IP-адресах и других специфичных для сервера вещах.

Проблема в том, что mysqld-exporter на сервере A выводит сообщение журнала: level=error msg="Error pinging mysqld: dial tcp SERVER_IP_ADDRESS:3306: getsockopt: connection timed out" source="mysqld_exporter.go:268" (где SERVER_IP_ADDRESS - это IP-адрес сервера), а экспортер на B работает отлично.

Я также пробовал создать контейнер «вручную», с docker run, и установите DATA_SOURCE_NAME как переменная среды, на сервере A, B и локально для подключения к серверу A. Теперь контейнер работает и подключается к серверу A, как и ожидалось, с моей локальной машины и с сервера. B, но все же не из A. Поэтому я предполагаю, что база данных работает нормально (не перегружена).

По каким причинам не работает докер-контейнер на машине A? У меня заканчиваются идеи, что искать.

Если какая-либо необходимая информация отсутствует, дайте мне знать!

РЕДАКТИРОВАТЬ:

Под словом «вручную» я подразумеваю команду docker-command docker run -d -p 9104:9104 -e DATA_SOURCE_NAME="USERNAME:PASSWORD@(SERVER_URL:MYSQL_PORT)/" prom/mysqld-exporter:v0.10.0 выполняется в консоли, которая работает для подключения к A из B и localhost, но не из A.

Как объяснялось, URL-адрес сервера также должен работать на сервере A, поскольку B и localhost используют один и тот же URL-адрес для подключения к базе данных.