Nextcloud container doesn't resolve DNS properly

Hi all,

I recently re-created my Nextcloud container to use linuxserver.io's image.

I attempted to setup the OnlyOffice integration, but when saving the connection, it returns an error:

Error when trying to connect (cURL error 6: Could not resolve host: documentserver.example.com (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://documentserver.example.com/healthcheck)

Some background information:

  • ONLYOFFICE Document Server is reachable at https://documentserver.example.com
  • example.com is a valid domain name which can get letsencrypt certs.
  • DNS server is running on the router at 192.168.10.1
  • documentserver.example.com is a cname to loadbalancer.home
  • Docker host DNS is set to 192.168.10.1

What’s strange is that in some cases DNS resolution works fine:

[kuzi@host]$ sudo docker exec nextcloud nslookup documentserver.example.com
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
documentserver.example.com     canonical name = loadbalancer.home.
Name:   loadbalancer.home
Address: 192.168.10.207

But not using ping or curl:

[kuzi@host]$ sudo docker exec nextcloud ping -c 3 documentserver.example.com
ping: bad address 'documentserver.example.com'

[kuzi@host]$ sudo docker exec nextcloud curl documentserver.example.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: documentserver.example.com

But interestingly it does for loadbalancer.home:

[kuzi@host]$ sudo docker exec nextcloud ping -c 3 loadbalancer.home
PING loadbalancer.home (192.168.10.207): 56 data bytes
64 bytes from 192.168.10.207: seq=0 ttl=63 time=0.130 ms
64 bytes from 192.168.10.207: seq=1 ttl=63 time=0.220 ms
64 bytes from 192.168.10.207: seq=2 ttl=63 time=0.210 ms

--- loadbalancer.home ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.130/0.186/0.220 ms
[kuzi@host]$ sudo docker exec nextcloud curl loadbalancer.home
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    17  100    17    0     0   9843      0 --:--:-- --:--:-- --:--:-- 17000

docker-compose.yml (removed some irrelevant options):

version: '3'

services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    volumes:
      - nfs-data:/data
      - nfs-config:/config
    dns:
      - 192.168.10.1
    networks:
      - proxy
    environment:
      - NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.example.com
      - TRUSTED_PROXIES=192.168.10.207/32
      - OVERWRITEPROTOCOL=https
      - TZ=America/Chicago
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.example.com`)"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=443"
      - "traefik.http.services.nextcloud.loadbalancer.server.scheme=https"

  documentserver:
    image: onlyoffice/documentserver
    container_name: documentserver
    restart: unless-stopped
    volumes:
      - documentserver-logs:/var/log/onlyoffice
      - documentserver-data:/var/www/onlyoffice/Data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.documentserver.rule=Host(`documentserver.example.com`)"
      - "traefik.http.middlewares.oo-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
      - "traefik.http.routers.documentserver.middlewares=oo-headers@docker"

networks:
  proxy:
    external: true

volumes:
  <snip for brevity>

Host /etc/resolv.conf:

nameserver 127.0.0.53
options edns0 trust-ad
search .

Host resolvectl output:

[kuzi@host]$ resolvectl status
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: foreign
  Current DNS Server: 192.168.10.1
         DNS Servers: 192.168.10.1
Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google
                      2606:4700:4700::1111#cloudflare-dns.com 2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google
<snip for brevity>

Container /etc/resolve.conf:

[kuzi@host]$ sudo docker exec nextcloud cat /etc/resolv.conf
nameserver 127.0.0.11
options edns0 trust-ad ndots:0

Any help would be great!

Well, I wasn’t able to figure out why this is happening, but for some reason tools like curl and ping in an Alpine container did not properly resolve cname records with a ADGuard DNS server. Due to my setup I couldn’t replace the cname with an A, so I setup a new DNS server if anyone else runs into this.

was your adguard dns in a container?

No, it runs on my OPNsense router, which is on a separate host.

Definitely a weird situation. Thank you for sharing your solution and additional details!