¿Puedo construir un contenedor Docker desde Dockerfile de forma interactiva con la asignación de algunos pseudo TTY?

12

Construyo contenedor desde abajo Dockerfile:

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...

Lo hago muy raramente, pero hay muchos comandos antes de usarlo ssh-keygeny después.

Sé que puedo hacerlo desde el script docker exec -it thirsty_darwin sh script.shy luego etiquetar la imagen y luego usar el encadenamiento de contenedores (imágenes), pero no es una solución tan clara como quiero.

Incluso el peor de los casos es ssh-add ~/.ssh/id_rsacuando tengo que usar la herramienta de esperar. Esperar herramienta ha codificado mi contraseña. No quiero hacerlo.

koralgooll
fuente

Respuestas:

17

En general, no debe incluir ningún secreto en las imágenes de Docker. Vea esta respuesta para más información sobre este tema.

Docker no admite compilaciones interactivas por buenas razones como se explica en este número .

Si realmente necesita hacer esto, puede usarlo docker commitasí:

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin

Ahora thirsty_darwintiene tus cambios interactivos.

Actualización: Docker ha lanzado una gestión de secretos más completa desde que se escribió esta respuesta.

Matt Vollrath
fuente
Como mencioné, había encontrado esa solución, pero el primer enlace (esta respuesta) tiene una buena solución para mi problema. Montaré la clave VOLUMEdesde el host en lugar de crear la mía en el contenedor. ¡Gracias!
koralgooll
1
Sin embargo, recomendaría que no lo haga docker commitnormalmente: puede pintarlo en una esquina de 'imagen dorada'.
Sobrique
Ese es un buen punto @Sobrique. Esta es una de las razones por las que Docker desalienta las construcciones interactivas o no deterministas
Matt Vollrath
Entonces, ¿se usa Docker para construir simplemente máquinas? Porque muchas instalaciones requerirán la interacción del usuario. No puedo usar Dockerfile en mi compilación solo porque necesito instalar SAGE y hacer algunas preguntas al usuario.
Magno C
@ MagnoC, no, puedes construir cualquier cosa con Docker. La idea detrás de Dockerfiles es que siempre desea el mismo resultado cuando se ejecuta. Las entradas interactivas podrían cambiar eso. Como dijo Matt, puede cometer un contenedor alterado en una imagen. Eso es lo que he estado haciendo al menos ..
musicliftsme