2017-03-09 16 views
2

docker-compose exec [service_name] [shell]という対話型プロンプトを表示し、最初に存在しない場合は別のシェルでフォールバックしたいとします。

は、私は、次のコマンドを実行してみました:

docker-compose exec [service_name] "(which zsh && zsh) || (which bash && bash) || (which sh && sh)"

を、私はこのエラーを得た:私は

docker-compose exec [service_name] bash(zshの/ bashの/ shを実行する場合

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"\\\"(which zsh && zsh) || (which bash && bash) || (which sh && sh)\\\"\": executable file not found in $PATH"

それはbashプロンプトを開き、容器の内側に、私は

(which zsh && zsh) || (which bash && bash) || (which sh && sh)

を実行し、それはzshのにシェルを変更し、正常に動作します。

答えて

0

実際にコンテナ内のコマンドが何であるかは不明です。 /bin/shのようなエントリポイントがある場合、コマンドは-c "command"である必要があります。ドッカーの設定をしていないので、類似したドッカーセットアップがあります:

docker run -ti --entrypoint /bin/sh --rm alpine -c \ 
    "(which zsh && zsh) || (which bash && bash) || (which sh && sh)" 
+0

私は自分の質問を編集しました。最初のシェルが存在しない場合、別のシェルでフォールバックしたいと思っています – Erika

+0

@エリカあなたが望むシェルをコンテナに追加して、気にしないでください。または、コンテナを起動する前にコンテナを検査し、事前に使用可能なシェルを知ることができます。 – kojiro

+0

@kijiroご意見ありがとうございますが、より良いソリューションが必要です。私たちはどんなコンテナでも動作させるためのツールを開発中です – Erika