Estoy ejecutando el siguiente comando desde mi Jenkinsfile . Sin embargo, aparece el error "El dispositivo de entrada no es un TTY" .
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh ¿Hay alguna manera de ejecutar el script desde Jenkinsfile sin hacer el modo interactivo?
Básicamente, tengo un archivo llamado script.sh que me gustaría ejecutar dentro del contenedor Docker.
Elimine -it de su cli para que no sea interactivo y elimine el TTY. Si no necesita ninguno de los dos, por ejemplo, ejecutar su comando dentro de un script Jenkins o cron, debe hacer esto.
O puede cambiarlo a -i si tiene una entrada canalizada en el comando docker que no proviene de un TTY. Si tienes algo como xyz | docker ... o docker ... <input en su línea de comando, haga esto.
O puede cambiarlo a -t si desea soporte TTY pero no lo tiene disponible en el dispositivo de entrada. Haga esto para las aplicaciones que buscan un TTY para habilitar el formato de color de la salida en sus registros, o para cuando más tarde se conecte al contenedor con una terminal adecuada.
O si necesita una terminal interactiva y no se está ejecutando en una terminal en Linux o MacOS, use una interfaz de línea de comandos diferente. Se informa que PowerShell incluye este soporte en Windows.
¿Qué es un TTY? Es una interfaz de terminal que admite secuencias de escape, mover el cursor, etc., que proviene de los viejos tiempos de las terminales tontas conectadas a los mainframes. Hoy lo proporcionan los terminales de comandos de Linux y las interfaces ssh. Vea el artículo de wikipedia para más detalles .
Para ver la diferencia de ejecutar un contenedor con y sin TTY, ejecute un contenedor sin uno: docker run --rm -i ubuntu bash . Desde dentro de ese contenedor, instale vim con apt-get update; apt-get install vim . Tenga en cuenta la falta de un aviso. Cuando ejecute vim contra un archivo, intente mover el cursor dentro del archivo.
docker run NO UTILIZAR -it flag(como dijo BMitch)
Y no es exactamente lo que estás preguntando, pero también sería útil para otros:
docker-compose exec use -T flag!¡La tecla -T ayudaría a las personas que usan docker-compose exec! (Deshabilita la asignación de pseudo-tty)
Por ejemplo:
docker-compose -f /srv/backend_bigdata/local.yml exec -T postgres backupo
docker-compose exec -T mysql mysql -uuser_name -ppassword database_name < dir/to/db_backup.sqlPara aquellos que luchan con este error y usan git bash en Windows, solo usen -it donde funciona perfectamente.