2017-03-09 728 views
2

我想獲得與docker-compose exec [service_name] [shell]的交互提示,並在另一個shell中回退(如果第一個不存在)。

我試圖運行下面的命令:

docker-compose exec [service_name] "(which zsh && zsh) || (which bash && bash) || (which sh && 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"

如果我運行

docker-compose exec [service_name] bash(zsh的/慶典/ SH )

它會打開一個bash提示符,然後在容器內我跑

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

,它工作正常,它改變了外殼的zsh。

回答

0

目前還不清楚容器內的命令實際上是什麼。如果有像/bin/sh這樣的入口點,那麼您的命令將需要爲-c "command"。由於我沒有docker-compose設置,因此這裏有一個可能類似的碼頭設置:

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

我編輯了我的問題。如果第一個shell不存在 – Erika

+0

@Erika你可以將你想要的shell添加到容器中,然後不用擔心它。或者,您可以在啓動之前檢查容器,並且知道什麼外殼可以提前使用。 – kojiro

+0

@kijiro感謝您的建議,但我們需要更好的解決方案。我們正在研究一種必須與任何容器配合使用的工具 – Erika

相關問題