2017-06-15 5 views
1

In meiner Entwicklung stelle ich häufig einen docker run Befehl gefolgt von einem docker exec Befehl auf der resultierenden Container-ID. Es ist ein wenig nervig, die Container-ID zwischen Befehlen kopieren und einfügen zu müssen. Daher versuchte ich, die Container-ID in meinen docker exec-Befehl zu pipen.Piping docker run Container-ID zu docker exec

Hier ist mein Beispielbefehl.

docker run -itd image | xargs -i docker exec -it {} bash

Dies startet den Container, aber dann bekomme ich die folgende Fehlermeldung.

the input device is not a TTY 

Hat jemand eine Idee, wie man das umgehen kann?

Edit: Ich habe auch vergessen zu erwähnen, ich habe einen ENTRYPOINT definiert und kann das nicht überschreiben.

+0

-it ** und ** d ?. –

+0

@OliverCharlesworth Das Beste aus beiden Welten! – jvhashe

Antwort

1

Tun Sie dies statt:

ID=$(docker run -itd image) && docker exec -it $ID bash 

Da xargs es Argumente ausführt, ohne eine neue tty Zuweisung.

+0

Danke! Das funktioniert perfekt. – jvhashe

+0

Gern geschehen! – Robert

0

Wenn Sie nur in den Container "bash" möchten, müssen Sie die Container-ID nicht übergeben. Sie können einfach

docker run -it --rm <image> /bin/bash 

Zum Beispiel laufen, wenn wir die ubuntu Basisbild nehmen

docker run -it --rm ubuntu /bin/bash 
[email protected]:/# 

vom documentation

-t: Vergeben Sie einen pseudo-tty
-i: Halten Sie STDIN offen, auch wenn es nicht angehängt ist
--rm: Entfernt den Container automatisch, wenn er beendet wird

Der Befehl/bin/bash overwrites ist der Standardbefehl, der mit der CMD-Anweisung in der Dockerdatei angegeben wird.

+0

Danke, ich habe vergessen zu erwähnen, dass ich bereits einen ENTRYPOINT definiert habe, der nicht überschrieben werden kann. – jvhashe