¿Cómo montar archivos como usuario específico cuando se utiliza la reasignación del espacio de nombres de Docker?

¿Cómo montar archivos como usuario específico cuando se utiliza la reasignación del espacio de nombres de Docker?

Descripción del problema:

Tengo un servicio web que usa Docker para ejecutar nginx y haproxy (entre otros contenedores). Quiero proporcionar estas imágenes de Docker a través de un registro privado de Docker Hub y, por lo tanto, no quiero crear ningún certificado tls en las imágenes para que cada cliente pueda montar su propio certificado en el contenedor (nginx y haproxy).

Para proteger el contenedor haproxy, lo ejecuto sin privilegios de root (el puerto superior a 1000 se asigna al puerto inferior a 1000 en Docker-compose). El contenedor nginx se basa en la imagen oficial de nginx y, por lo tanto, solo usa root cuando se inicia el servicio y luego cambia al usuario de nginx.

Para proteger aún más los contenedores, configuré docker-remapping (configuración predeterminada con el usuario predeterminado de Dockremap).

Problema:

La clave pública y privada del certificado tls se están montando en los contenedores como el usuario "nadie" y, por lo tanto, los contenedores haproxy y nginx no pueden leer estos archivos porque utilizan usuarios diferentes (no root) para leer los archivos.

Soluciones (hasta ahora):

  1. Puedo hacer que los archivos tls sean legibles en todo el mundo, por ejemplo, 644, esto funciona, pero es una solución terriblemente insegura.

  2. Podría crear mi propia imagen nginx tal como lo hice con la imagen haproxy y agregar los usuarios del contenedor al grupo nadie para poder cambiar los permisos de los certificados a 640. Este es un truco feo.

  3. Elimine la reasignación de Docker para poder montar archivos de certificado con el mismo uid que el usuario en los contenedores nginx y haproxy. Esto significaría que pierdo la seguridad de la reasignación de Docker y que los archivos de certificado necesitan el mismo uid que el usuario dentro de los contenedores haproxy y nginx.

  4. Cree nuevas imágenes durante la instalación (y al actualizar las imágenes base o los archivos de certificado) en el servidor de mi cliente con mis imágenes existentes de mi repositorio Docker privado como imágenes base. Los archivos de compilación de Docker en el servidor de mis clientes serán muy simples y solo están destinados a copiar los archivos de certificado SSL en los contenedores con los permisos correctos.

Pregunta:

¿Hay alguna manera de asignar el uid del host al uid del usuario dentro del contenedor, de modo que los archivos montados tengan el uid correcto?

información relacionada