Версия: A-Parser 1.2.246 Enterprise. Описание: При использовании адреса "http://localhost" в качестве параметра callURLOnComplete после завершения задачи вызова не происходит, а в главном логе приложения появляется запись: "[master] Call URL on complete error: 'http://localhost' 596 Resolve error: Not existing domain" Соответственно, проблема также затрагивает связь в Docker (если A-Parser в контейнере), т.к. хосты-названия контейнеров тоже не резолвятся. В качестве решения пока придётся опрашивать A-Parser о завершении.
на данный момент A-Parser целиком полагается на внешний резолвер, без разрешения локальных запросов в данном случае рекомендуем просто указать IP 127.0.0.1 в случае localhost, или передавать конкретный IP контейнера для докера также можно указать локальный DNS сервер который будет обслуживать локальные домены
Раз это не считается ошибкой, предлагаю отметить тогда это как предложение по улучшению. IP передавать в общем случае не вариант, т.к. они разные динамические. А вот предложение насчёт DNS-сервера я не совсем понял.
поднять локальный DNS сервер, который будет следовать классической схеме резолвинга, учитывая localhost, /etc/hosts и т.д.
Всё ещё не понимаю. А как это поможет A-Parser, если он это как-то обходит? В Docker и так работает встроенный DNS-сервер, и программы в контейнерах по умолчанию спокойно связываются с другими локальными хостами (в т.ч. curl из консоли, например).
Обратите внимание на https://a-parser.com/wiki/additional-settings/ в части указания DNS серверов Локальные программы на 99% используют функцию резолвинга ядра(gethostbyname и т.д.), которая заботится о чтении /etc/hosts, A-Parser в свою очередь выполняет прямые запросы исключительно к DNS серверам, которые указаны в настройках - по умолчанию это сервера Google 8.8.8.8 и 8.8.4.4
Вот, опцию про DNS я не видел. В таком случае можно указать напрямую фиксированный адрес DNS-сервера Docker 127.0.0.11, на который выходят и который успешно используют другие локальные программы. Однако, так получилась другая проблема: [master] Call URL on complete error: 'http://nginx' 596 Can't connect(No route to host) Это я указал в config/config.txt строку "dns: 127.0.0.11"
То же, что и просто nslookup nginx: Server: 127.0.0.11 Address: 127.0.0.11#53 Non-authoritative answer: Name: nginx Address: 10.0.0.42 Name: nginx Address: 10.0.0.58
Я заметил, что если попробовать тем же curl-ом сделать запрос именно на IP, в которые nslookup резолвит nginx, то второй IP рабочий (там ответ от сервера), а вот на первом именно тот самый "No route to host". Я не разбираюсь до такой степени в DNS — может быть, другие программы используют реализацию, которая в конечном счёте как-то перебирает IP и придерживается рабочего, а реализация, которую использует A-Parser, попадает только на первый и на этом заканчивает работу? Просто предположение.
Какая-то проблема есть со стороны Docker. При перезапуске контейнера (в данном примере — nginx), он добавляется с новым IP, а старые не уходят. 2 раза перезапустил — теперь хост резолвится уже в 4 разных IP, из которых один 1 новый рабочий и 3 старых висят нерабочие с "No route to host". Получается, curl, например, как-то всё равно справляется, но видно, что он обходит адреса, т.к. от раза к разу подряд он то сразу получает ответ, то долго висит (видимо, неудачно попадает и тыкается во все нерабочие IP сначала), а A-Parser нет, но не знаю, можно ли назвать это виной A-Parser (должно ли ПО быть готово к наличию нерабочих IP в списке). Так или иначе пойду решать проблему с Docker-ом всё равно.