Posso creare un contenitore Docker da Dockerfile in modo interattivo con allocazione di alcuni pseudo TTY?


12

Costruisco container dal basso 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 faccio abbastanza raramente, ma ci sono molti comandi prima di usarlo ssh-keygene dopo.

So che posso farlo dallo script attraverso docker exec -it thirsty_darwin sh script.she quindi taggare l'immagine e quindi utilizzare il concatenamento dei contenitori (immagini), ma non è la soluzione chiara che desidero.

Anche il caso peggiore è ssh-add ~/.ssh/id_rsaquando devo usare lo strumento aspettarsi. Lo strumento Expect ha codificato la mia password. Non voglio farlo.

Risposte:


17

In generale, non è necessario includere alcun segreto nelle immagini Docker. Vedi questa risposta per ulteriori informazioni su questo argomento.

Docker non supporta build interattive per buoni motivi, come spiegato in questo problema .

Se hai davvero bisogno di farlo, puoi usare docker commitcosì:

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

Ora thirsty_darwinha le tue modifiche interattive.

Aggiornamento: Docker ha rilasciato una gestione dei segreti più completa da quando è stata scritta questa risposta.


Come ho già detto, avevo trovato quella soluzione, ma il primo link (questa risposta) ha una buona soluzione al mio problema. Monterò la chiave VOLUMEdall'host invece di crearne una mia nel container. Grazie!
Koralgooll,

1
Vorrei esortare a non fare docker commitnormalmente però: può dipingerti in un angolo di un 'immagine d'oro'.
Sobrique,

Questo è un buon punto @Sobrique. Questo è uno dei motivi per cui Docker scoraggia build interattivi o comunque non deterministici
Matt Vollrath,

Quindi Docker è usato solo per costruire macchine? Perché molte molte installazioni richiedono l'interazione dell'utente. Non riesco ad utilizzare Dockerfile nella mia build solo perché devo installare SAGE e porre alcune domande all'utente.
Magno C,

@MagnoC, no, non puoi costruire nulla con Docker. L'idea alla base di Dockerfiles è che si desidera sempre lo stesso risultato durante l'esecuzione. Gli input interattivi potrebbero cambiarlo. Come ha detto Matt, puoi inserire un contenitore alterato in un'immagine. Questo è quello che ho fatto almeno ..
musicliftsme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.