2017-06-15 9 views
1

私の開発では、docker runコマンドの後に、結果のコンテナIDに対してdocker execコマンドを続けて発行することがよくあります。コマンド間でコンテナIDをコピー/ペーストしなければならないので、私はdocker execコマンドにコンテナIDをパイプしていました。パイプドッカーがコンテナIDをドッカーエグゼクティブに実行

ここに私のコマンド例があります。

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

これは、コンテナを開始し、その後私は次のエラーを取得します。

the input device is not a TTY 

これを回避する方法はありますか?

編集:ENTRYPOINTが定義されており、それを上書きすることはできません。

+0

-it **および** d? –

+0

@OliverCharlesworth両方の世界のベスト! – jvhashe

答えて

1

代わりにこれを行います。

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

xargsが新しい端末を割り当てることなく、それ引数を実行しているため。

+0

ありがとう!これは完全に機能します。 – jvhashe

+0

あなたは大歓迎です! – Robert

0

コンテナに「bash」したい場合は、コンテナIDを渡す必要はありません。
-i仮想端末を割り当て:あなたは、単に我々がdocumentation

-tからUbuntuの基本イメージ

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

を取る場合、例えば

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

実行することができます。接続されていなくてもSTDINを開いたままにする
--rm:コンテナを出すときにコンテナを自動的に外す

コマンド/ bin/bash overwrites DockerfileのCMD命令で指定されたデフォルトコマンド。

+0

ありがとう、私はすでにENTRYPOINTが上書きされないように定義されていることを忘れていました。 – jvhashe

関連する問題