Tengo una aplicación funcionando correctamente con docker-compose up . Esa aplicación se conecta mediante SSH a mi máquina host y ejecuta algunos comandos. En este momento, proporciono las credenciales de SSH escribiéndolas en el código fuente de esta manera:
const pass = 'mypassword'; let username = 'myusername'; let host = '172.17.0.1'; Estoy tratando de seguir esta guía para proporcionar las credenciales de una mejor manera. No puedo entender cómo funciona esta línea privateKey: require('fs').readFileSync('/here/is/my/key') ¿Es una ruta relativa, es la "clave" un archivo con la contraseña como texto sin formato? ¿Hay algo que deba proporcionar desde mi máquina host? ¿Cómo puedo dar las credenciales en un contenedor docker?
En general, para pasar parámetros a un contenedor para que los lea el script de Node.js, puede:
Para datos secretos como las credenciales de SSH, desaconsejaría el uso de argumentos o variables de entorno porque se pueden inspeccionar desde varias fuentes. Este artículo explica bien por qué: https://diogomonica.com/2017/03/27/why-you-shouldnt-use-env-variables-for-secret-data/
En su lugar, crearía un archivo de configuración simple que su secuencia de comandos de Node.js pueda leer.
{ "username": "myuser", "password": "pass", "host": "172.17.0.1", ... } Puede colocar este archivo en un directorio de su sistema host y montarlo en /myvolume en el contenedor cuando inicie su contenedor:
docker run -it -v host-directory:/myvolume myimageSu secuencia de comandos Node.js ahora puede leer el archivo JSON:
const configFilePath = "/myvolume/secret-config.json" const config = JSON.parse(fs.readFileSync(configFilePath)); // now you can use config.host, config.username and config.passwordComo nota al margen: recomiendo configurar su servidor SSH remoto para usar autenticación de clave privada/pública, ya que las contraseñas generalmente son menos seguras. Una vez que haya configurado la autenticación de clave privada/pública, puede colocar el archivo de clave privada en el mismo volumen y cargarlo desde su secuencia de comandos Node.js de manera similar :)