2017-02-02 4 views
2

Ich führe den Andock-Container lokal aus, um seinen Status zu beheben. Ich möchte nicht immer die RUN/ENTRYPOINT ausführen, ich möchte oft in den laufenden Container gehen, einige Dinge tun, und dann die RUN/ENTRYPOINT ausführen.So legen Sie den Befehlsverlauf in einer Dockerdatei fest

Es wäre super bequem, die RUN/ENTRYPOINT nach I docker run bash durch Drücken der Taste nach oben zu haben. Also ich dachte, es wäre schön, wenn ich die Geschichte mit history -s ... in der Dockerfile ändern könnte. Auf diese Weise, sobald ich docker run bash, kann ich nur drücken und haben die RUN/ENTRYPOINT zur Verfügung.

Wenn ich diese Datei im Docker setzen, habe ich diesen Fehler:

/bin/sh: 1: history: not found 

Gibt es eine Möglichkeit, die bash Geschichte in einem Dockerfile zu setzen?

Antwort

1

Sie erhalten den Fehler, da RUN Befehle in /bin/sh laufen, die zur Verfügung keine history Befehl hat.

Um dies zu ermöglichen, müssen Sie während des Builds eine interaktive Bash-Shell ausführen, damit Ihr Verlaufseintrag gespeichert wird.

RUN bash -ic 'history -s foobar' 

, die hinter einer History-Datei mit foobar als seinen jüngsten (und wahrscheinlich nur) Eintrag verlassen sollten.

Sie werden einen Fehler beim Build über ioctl sehen ... das ist normal, weil interactive bash erwartet, ein Terminal zu finden, und es wird keins geben. Aber es sollte immer noch gut funktionieren.

bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell

Beachten Sie, dass dies für den Benutzer gespeichert wird, den Sie den Befehl ausführen. Wenn Ihr Bild mit der USER-Anweisung zu einem Nicht-Root-Benutzer wechselt, sollten Sie dies nach der Zeile USER setzen, damit es in dem Benutzer gespeichert wird, mit dem Ihr Image ausgeführt wird.

+0

Danke für die Antwort, ich versuchte dies und als ich gedrückt, war die Geschichte nicht da. Dies war die Ausgabe von 'Geschichte' war leer. –

+0

@DanielKaplan Welche Dockerdatei verwendest du? Ich baue eine einfache Dockerdatei mit 'FROM ubuntu: latest' und diesem einen RUN-Befehl. Habe es als 'docker run -it myimage bash' ausgeführt und die Geschichte hat in meinem Test funktioniert. –

+0

Mein Problem war, dass ich 'RUN bash -ic 'Geschichte -s foobar &' hatte, ich muss dem & wie folgt entkommen:' RUN bash -ic 'Geschichte -s foobar \ &' und es hat funktioniert. Danke –

Verwandte Themen