Penso che il reverse proxy esterno sia la chiave: non credo che sia risolvibile, o almeno non facilmente, solo all’interno del container Docker.
L’ho risolto ora facendo in modo che Discourse Docker ascolti su una socket Unix e ponendo davanti Caddy sulla stessa macchina (fuori da Docker). La configurazione di Caddy è banale, include Let’s Encrypt e ora funziona come previsto anche per IPv6.
forum.example.com {
proxy / unix:/var/discourse/shared/web-only/nginx.http.sock {
transparent
websocket
}
}