2017-03-09 736 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

相关问题