Docker использует встроенный DNS-сервер, который позволяет контейнерам беспрепятственно общаться друг с другом по именам сервисов. Однако на практике достаточно часто контейнеры внезапно теряют связность.
Популярное решение поставить внешний DNS, у меня это были: образы defreitas/dns-proxy-server:4.0.0 или ghcr.io/thisisqasim/dns-proxy-server:3.33.0-snapshot, но на стабильность решения оказывало влияние версии ОС, версия Docker и другие факторы, что вызывало сложности в эксплуатации и отказы про обновлениях.
Поэтому я решил переехать на coredns-dockerdiscovery, но есть нюанс.
CoreDNS — это высокопроизводительный движок на Go, который достаточно неплохо кастомизируется и имеет большое количество плагинов.
coredns-dockerdiscovery отказался работать на docker 29.1.5, предложенное решение в issues40 также не заработало, потому пришлось немного исправить код и сделать свою сборку: spions/coredns-dockerdiscovery:0.0.6
Бонусом решение имеет встроенный мониторинг: https://grafana.com/grafana/dashboards/14981-coredns/
docker-compose.yml.j2
services:
coredns:
image: spions/coredns-dockerdiscovery:0.0.6
hostname: {{ item }}.{{ ansible_facts['nodename'] }}.loc
container_name: {{ item }}.{{ ansible_facts['nodename'] }}.loc
restart: unless-stopped
network_mode: bridge
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./Corefile:/Corefile
healthcheck:
test: ["CMD-SHELL", "nslookup coredns.{{ ansible_facts['nodename'] }}.loc 127.0.0.1 || exit 1"]
interval: 30s
timeout: 10s
retries: 3
ports:
- {{ docker_daemon_options.bip | default('172.17.0.1/24', true) | regex_replace('^(.*)/.*$', '\\1') }}:53:53/tcp
- {{ docker_daemon_options.bip | default('172.17.0.1/24', true) | regex_replace('^(.*)/.*$', '\\1') }}:53:53/udp
- 9153:9153
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "1"
Corefile.j2
.:53 {
docker {
domain loc
}
log
errors
prometheus :9153
forward . {{ '8.8.8.8' if (ansible_dns.nameservers | first) | ansible.utils.ipaddr('127.0.0.0/24') else (ansible_dns.nameservers | first) }} {
max_fails 3
}
# Кэширование ответов для скорости
cache 30
}
Потребление ресурсов изменилось с:

до:

RSS
Твиттер
G+
Категория: 
