Discourse インスタンスを Apache のプロキシ経由でソケット通信させています。その設定は こちら に記載されています。
SELinux が有効なため、httpd がソケットを使用できるよう、推奨通りにソケットに httpd が読み書きできるコンテキストを付与しました。
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
これで問題なく動作します。素晴らしいです!
(余談ですが、ソケット自体は「コンテンツ」ではないため、httpd が他のランタイムインフラで使用する httpd_var_run_t の方が適切なコンテキストではないでしょうか?)
しかし、Discourse コンテナを再起動するたびに、ソケットファイルが元のコンテキストで再作成されてしまい、新しいコンテキストが適用されません。そのため、Apache が Discourse と通信できるようになる前に restorecon を実行する必要があります。これを手動で実行するのを忘れ、フォーラムにアクセスできなくなる可能性があります。crond スクリプトで定期的に restorecon を実行する方法も思いつきましたが、それは不格好なハックです。
ソケットファイルの作成時に正しいコンテキストが設定されるように、あるいは少なくとも作成プロセスの一部としてコンテキストがリセットされるようにするには、どうすればよいでしょうか?