我认为外部反向代理是关键——仅从 Docker 容器内部根本无法解决此问题,或者至少无法轻易解决。
我现在的解决方案是让 Discourse Docker 监听一个 Unix 套接字,并在同一台机器上(在 Docker 外部)用 Caddy 作为前端。Caddy 的配置非常简单,已包含 Let’s Encrypt,现在 IPv6 也能按预期工作了。
forum.example.com {
proxy / unix:/var/discourse/shared/web-only/nginx.http.sock {
transparent
websocket
}
}