docker-compose exec 失败:$PATH 中找不到可执行文件

3
我希望可以通过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/bash/sh)
它将打开bash提示符,然后在容器内部运行 (which zsh && zsh) || (which bash && bash) || (which sh && sh) 这样就可以正常工作,将Shell更改为zsh。
1个回答

1

目前容器内部的命令并不清楚。如果存在类似于/bin/sh的入口点,那么您的命令将需要是-c "command"。由于我没有您的docker-compose设置,这里提供一个类似的docker设置:

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

我编辑了我的问题。如果第一个不存在,我想在另一个 shell 上有备选方案。 - Erika
@Erika 你可以将所需的 shell 添加到容器中,然后就不必再担心它了。或者,在启动容器之前,你可以检查容器,并提前知道可用的 shell 是什么。 - kojiro
@kijiro 感谢您的建议,但我们需要一个更好的解决方案。我们正在开发一种工具,它必须能够与任何容器一起使用。 - Erika
@Erika 连一个完全没有外壳的容器也可以吗? - kojiro
很可能只有带有内置 shell 的容器。 - Erika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接