Je pense que le proxy inverse externe est la clé : je ne pense pas que ce problème soit résoluble, ou du moins pas facilement, uniquement depuis le conteneur Docker.
Je l’ai résolu en faisant écouter le conteneur Discourse sur une socket Unix et en le plaçant derrière un Caddy sur la même machine (en dehors de Docker). La configuration de Caddy est triviale, inclut Let’s Encrypt, et maintenant cela fonctionne comme prévu, y compris pour l’IPv6.
forum.example.com {
proxy / unix:/var/discourse/shared/web-only/nginx.http.sock {
transparent
websocket
}
}