Однако мы не можем запросить информацию об источнике/последнем обновлении NTP из приложения Java в контейнере Docker.
p>
Примечание: я понимаю, что это противоречит смыслу контейнеризации, и если бы я мог запустить это локально на машине, я бы это сделал. Однако я застрял в Docker и был бы рад любому решению. Этому времени потребуется всего около 3 месяцев, пока мы не запустим нашу версию Kubernetes.
Код, который у нас есть для запроса, очень похож на NTPTimesource.java, в частности, строки 108-114:
Код: Выделить всё
NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(DEFAULT_NTP_TIMEOUT_MS);// Timeout if a response takes longer than 10 seconds
client.open();
InetAddress address = InetAddress.getByName(ntpServer);
TimeInfo info = client.getTime(address);
info.computeDetails();
Код: Выделить всё
172.18.0.9Код: Выделить всё
java.net.SocketTimeoutException: Receive timed out
image-1 | at java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:703)
image-1 | at java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:633)
image-1 | at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:240)
image-1 | at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:700)
image-1 | at org.apache.commons.net.ntp.NTPUDPClient.getTime(NTPUDPClient.java:89)
image-1 | at org.apache.commons.net.ntp.NTPUDPClient.getTime(NTPUDPClient.java:49)
Если мы знаем ntpServer и вводим его напрямую, то зависание исчезает и вся система работает нормально (кроме адресов 172.18.0.*). Однако мы не гарантируем, что знаем, какой NTP-сервер является авторитетным для хоста в данный момент времени, что снижает гибкость решения.
Ранее при работе на CentOS7 это работало . В системе CentOS7 мы использовали ntpd, которого нет в Oracle Linux 8. Проблема возникает независимо от того, применяется ли selinux.
У меня заканчиваются идеи (и результаты поиска Google), потому что я почти уверен, что то, что я делаю, просто неправильно.
- Должен ли контейнер запрашивать информацию NTP хоста через NTPUDPClient()?
- Существуют ли способы передачи информации NTP в контейнер и обеспечения регулярных обновлений? Я мог бы записывать в файл и читать его с определенной частотой, но возникает проблема рассинхронизации с миром.
- Есть мысли, почему это работает с ntpd, а не с chrony?
Обновление Я остановился на всей ситуации с Docker. и вернулся к чертежной доске. Просто используя сценарий Python на самом хосте, я не могу выполнить запрос NTP на локальном хосте (127.0.0.1) с помощью chrony, даже как root и с отключенным брандмауэром. Пока я не смогу выполнить запрос NTP локально и убедиться, что Chrony настроен правильно, я не буду беспокоиться о настройке Docker.
Подробнее здесь: https://stackoverflow.com/questions/793 ... image-java
Мобильная версия