Kann ich einen Docker-Container aus Dockerfile auf interaktive Weise mit Zuweisung von Pseudo-TTY erstellen?

12

Ich baue Container unter 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
...

Ich mache es ziemlich selten, aber es gibt viele Befehle vor ssh-keygenund nach der Verwendung.

Ich weiß, dass ich es vom Skript bis zum docker exec -it thirsty_darwin sh script.shTag-Image machen und dann die Verkettung von Containern (Bildern) verwenden kann, aber es ist keine so klare Lösung, wie ich möchte.

Selbst der schlimmste Fall ist, ssh-add ~/.ssh/id_rsawenn ich Expect-Tool verwenden muss. Das Expect-Tool hat mein Passwort fest codiert. Ich will das nicht tun.

koralgooll
quelle

Antworten:

17

Im Allgemeinen sollten Sie keine Geheimnisse in Docker-Images aufnehmen. Weitere Informationen zu diesem Thema finden Sie in dieser Antwort .

Docker unterstützt interaktive Builds aus guten Gründen nicht, wie in dieser Ausgabe erläutert .

Wenn Sie dies wirklich tun müssen, können Sie Folgendes verwenden docker commit:

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

Jetzt thirsty_darwinhaben Sie Ihre interaktiven Änderungen.

Update: Docker hat eine umfassendere Verwaltung von Geheimnissen veröffentlicht, seit diese Antwort geschrieben wurde.

Matt Vollrath
quelle
Wie bereits erwähnt, hatte ich diese Lösung gefunden, aber der erste Link (diese Antwort) bietet eine gute Lösung für mein Problem. Ich werde den Schlüssel VOLUMEvom Host aus bereitstellen, anstatt meinen eigenen im Container zu erstellen. Vielen Dank!
Koralgooll
1
Ich würde jedoch dringend empfehlen, dies nicht docker commitnormal zu tun - es kann Sie in eine Art "goldenes Bild" -Ecke malen.
Sobrique
Das ist ein guter Punkt @Sobrique. Dies ist einer der Gründe, warum Docker von interaktiven oder anderweitig nicht deterministischen Builds abrät
Matt Vollrath,
Wird Docker also verwendet, um nur einfache Maschinen zu bauen? Weil viele, viele Installationen Benutzerinteraktion erfordern. Ich kann Dockerfile in meinem Build nicht verwenden, nur weil ich SAGE installieren muss und es dem Benutzer einige Fragen stellt.
Magno C
@MagnoC, nein, mit Docker können Sie nichts bauen. Die Idee hinter Dockerfiles ist, dass Sie beim Ausführen immer das gleiche Ergebnis erzielen möchten. Interaktive Eingänge könnten dies ändern. Wie Matt sagte, können Sie einen geänderten Container in ein Bild einfügen. Das habe ich zumindest gemacht ..
musicliftsme