Nginx.http.sock recreado con contexto incorrecto de selinux

Tengo una instancia de Discourse proxyada detrás de Apache y comunicándose a través de un socket, como se describe aquí.

Tengo SELinux habilitado, por lo que, para otorgar a httpd permiso para usar el socket, he asignado al socket un contexto donde httpd tiene permiso de lectura y escritura, según se aconseja:

semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock

Esto funciona. ¡Es genial!

(Aparte: ¿Sería un contexto más apropiado httpd_var_run_t, ya que el socket en sí no es contenido y este es el contexto que httpd utiliza para otra infraestructura de tiempo de ejecución?)

Sin embargo, cada vez que se reinicia el contenedor de Discourse, el archivo del socket se recrea con su contexto original, no con el nuevo; por lo tanto, debo ejecutar restorecon en él antes de que Apache pueda comunicarse con Discourse. Es fácil olvidarse de hacerlo y terminar con un foro inaccesible. Se me ocurrió que podría usar un script de cron para ejecutar restorecon periódicamente para no tener que recordarlo manualmente, pero eso es un parche feo.

¿Cómo puedo asegurarme de que el archivo del socket obtenga el contexto correcto al crearse (o al menos que su contexto se restablezca como parte del proceso de creación)?

Podrías crear un script de reinicio que inicie el contenedor y cambie los permisos (y otro que realice una reconstrucción).

Lo que un script de reinicio no detectaría es realizar actualizaciones desde la web a través del panel de administración; eso fue lo que me ocurrió la última vez y me llevó a preguntarme si existía una solución para todos los casos.

También debo decir: no entiendo por qué el socket no recibe el contexto correcto al crearse. SELinux claramente sabe cuál debe ser el contexto predeterminado para el socket, como muestra la ejecución de restorecon. (Además, puedo ver la entrada para el socket creada al ejecutar semanage fcontext en /etc/selinux/targeted/contexts/files/file_contexts.local.)