Puis-je créer un conteneur Docker à partir de Dockerfile de manière interactive avec l'allocation d'un pseudo TTY?

12

Je construis un conteneur sous 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
...

Je le fais assez rarement, mais il y a beaucoup de commandes avant de l'utiliser ssh-keygenet après.

Je sais que je peux le faire à partir du script docker exec -it thirsty_darwin sh script.sh, puis étiqueter l'image, puis utiliser le chaînage de conteneurs (images), mais ce n'est pas la solution aussi claire que je le souhaite.

Le pire des cas est ssh-add ~/.ssh/id_rsaquand je dois utiliser l'outil Attendre. L'outil Attendre a codé en dur mon mot de passe. Je ne veux pas le faire.

koralgooll
la source

Réponses:

17

En règle générale, vous ne devez pas inclure de secrets dans les images Docker. Voir cette réponse pour en savoir plus sur ce sujet.

Docker ne prend pas en charge les versions interactives pour de bonnes raisons, comme expliqué dans ce problème .

Si vous avez vraiment besoin de le faire, vous pouvez utiliser docker commitcomme ceci:

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

A maintenant thirsty_darwinvos modifications interactives.

Mise à jour: Docker a publié une gestion des secrets plus complète depuis la rédaction de cette réponse.

Matt Vollrath
la source
Comme je l'ai mentionné, j'avais trouvé cette solution, mais le premier lien (cette réponse) a une bonne solution de contournement pour mon problème. Je monterai la clé VOLUMEdepuis l'hôte au lieu de créer la mienne dans un conteneur. Merci!
koralgooll
1
Je vous conseille vivement de ne pas faire docker commitnormalement cependant - cela peut vous peindre dans un coin d'image dorée.
Sobrique
C'est un bon point @Sobrique. C'est l'une des raisons pour lesquelles Docker décourage les builds interactifs ou non déterministes
Matt Vollrath
Docker est-il donc utilisé pour construire uniquement des machines? Parce que de nombreuses installations nécessitent une interaction de l'utilisateur. Je ne peux pas utiliser Dockerfile dans ma version simplement parce que j'ai besoin d'installer SAGE et qu'il pose des questions à l'utilisateur.
Magno C
@MagnoC, non, vous ne pouvez rien construire avec Docker. L'idée derrière Dockerfiles est que vous voulez toujours le même résultat lors de l'exécution. Les entrées interactives pourraient changer cela. Comme l'a dit Matt, vous pouvez valider un conteneur modifié dans une image. C'est ce que j'ai fait au moins ..
musicliftsme