Es una buena pregunta, pero no tengo una respuesta concreta para ti.
El sistema de configuración utilizado dentro del contenedor es:
https://github.com/discourse/pups
El README allí describe cómo funcionan los hooks en general. Los hooks específicos disponibles dependen de cómo esté configurada tu instancia: el archivo principal app.yml incluye una o más plantillas. En la mayoría de los casos, una de ellas es web.template.yml:
Ahí es donde se define el hook assets_precompile (en la [L159] al momento de escribir esto). Según la documentación de Pups, puedes ejecutar otros comandos antes o después de que se complete con before_assets_precompile y after_assets_precompile, respectivamente.
Los comandos se ejecutan dentro del contenedor Docker, así que no tienes que hacer nada al respecto.
La directiva cd: puede apuntar directamente a /var/www/discourse/public/assets/ y cada línea en cmd se ejecuta desde ese directorio. (Advertencia: cada línea en un array cmd se ejecuta en una shell separada, como en un Makefile).
No estoy seguro de si el contenido de /var/www/discourse/public/assets/ se conservará entre compilaciones, por lo que es posible que tengas que crear el repositorio git local y forzar el push cada vez. La solución “más correcta” podría ser definir un volumen Docker en app.yml para el directorio de activos en un volumen Docker definido en app.yml como los demás y persistir fuera del contenedor.