Как сказать, когда служба (любая служба) доступна на определенном удаленном порту

Я использую docker и docker-compose для создания службы, которая представляет собой комбинацию нескольких других. Поскольку внутренние службы обслуживают друг друга, существует предопределенный приоритет, по которому они должны запускаться. Самый простой способ, который я нашел для этого, - использовать сценарий запуска для запуска каждой службы (в их назначенном контейнере) для проверки предварительных условий перед фактическим запуском службы контейнера. Вот что я использую прямо сейчас:

#!/bin/sh

cd /external-indexer

echo "Waitng for RabbitMQ on $RMQ_HOST:$RMQ_PORT"
until curl http://$RMQ_HOST:$RMQ_PORT/  > /dev/null 2>&1
do
  echo "$(date) - RabbitMQ is not ready yet"
  sleep 1
done
echo "$(date) - RabbitMQ is ready"

echo "Waitng for PostgreSQL on $PG_HOST:$PG_PORT"
until wget $PG_HOST:$PG_PORT -t 1 2>&1 | grep " connected"
do
    echo "$(date) - PostgreSQL is not ready yet"
    sleep 1
done
echo "$(date) - PostgreSQL is ready"

./run-service

Как вы можете видеть здесь, я жду двух других служб (RabbitMQ и PostgreSQL) перед запуском текущей службы. И это работает. Но дело в том, что PostgreSQL не предоставляет протокол HTTP, и единственный способ узнать, работает ли он, - это найти подключенный в ответе, предоставленном программой wget . .

Мне было интересно, есть ли законный способ сделать это, который работает независимо от протокола, используемого в порту. И помните, я не ищу какой-то большой сервис, который мог бы организовать всю мою сеть. Я ищу небольшую программу, подобную той, которая названа здесь, которую можно найти в контейнере и которая возвращает истину, как только соединение может быть установлено на удаленном порту.

2
задан 16 March 2016 в 02:53
1 ответ

Telnet часто используется для быстрой проверки соединения.

telnet <servername> <port number>

Вы должны получить сообщение о подключении, если порт доступен, например:

$ telnet www.google.com 80
Trying 216.58.195.132...
Connected to www.google.com.
Escape character is '^]'.

Есть также netcat, который является еще одним очень простым сетевым инструментом, который может создавать произвольные TCP и UDP соединения.

.
1
ответ дан 3 December 2019 в 12:41

Теги

Похожие вопросы