2016-10-21 4 views
0

Недавно я установил Docker native на Mac, переключившись с докер-машины. У меня есть контейнер с Zookeeper, который открывает порт на 2181. Однако этот процесс может занять около 10-15 секунд.Docker на Mac: как проверить порт для прослушивания в контейнере

Ранее с Докер-машина используется для проверки, был ли начал Zookeeper прослушивает порт, используя Netcat:

nc -z 192.168.99.100 2181 

Netcat возвращает ненулевой код завершения, а Zookeeper запускается и как только это будет сделано, соединение выполнено успешно, а netcat возвращает ноль.

В случае с Docker Mac-native соединение всегда выполняется успешно, когда контейнер присутствует, но во время запуска Zookeeper он немедленно отключает соединение. Когда Zookeeper готов, он держит соединение открытым. Netcat не видит эту разницу, и «nc -z» всегда возвращает ноль.

Итак, мой вопрос: есть ли простой способ проверить снаружи контейнера, действительно ли Zookeeper начал прослушивать порт?

ответ

0

Если вы просто проверяете, хотите ли вы проверить вручную, вы можете использовать telnet.

Команда:

telnet localhost 80 

Выход:

Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 

Это означает, что соединение было успешным. Использование команды:

telnet <address> <port> 

Обратите внимание, что вы можете использовать только telnet для портов TCP.

Другой способ проверять службы из контейнера с docker exec:

docker exec <container name> "echo stat | nc <zookeeper ip> 2181" 
docker exec <container name> "bash path/to/zkServer.sh status" 
+0

телнет работает так же, как Netcat здесь. Он также получает действительное соединение, но как только соединение установлено, докер сбрасывает его, поскольку Zookeeper еще не прослушивает. После запуска Zookeeper соединение остается открытым после установления. –

+0

проверить мой обновленный ответ пожалуйста. –