如何从 docker 容器在主机上运行 shell 脚本?

新手上路,请多包涵

如何从 docker 容器控制主机?

例如,如何执行复制到主机的 bash 脚本?

原文由 Alex Ushakov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 740
2 个回答

这真的取决于你需要那个 bash 脚本来做什么!

例如,如果 bash 脚本只是回显一些输出,你可以这样做

docker run --rm -v $(pwd)/mybashscript.sh:/mybashscript.sh ubuntu bash /mybashscript.sh

另一种可能性是您希望 bash 脚本安装一些软件——比如安装 docker-compose 的脚本。你可以做类似的事情

docker run --rm -v /usr/bin:/usr/bin --privileged -v $(pwd)/mybashscript.sh:/mybashscript.sh ubuntu bash /mybashscript.sh

但是在这一点上,您真的必须深入了解脚本正在做什么以允许从容器内部对您的主机所需的特定权限。

原文由 Paul Becotte 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用命名管道。在主机操作系统上,创建一个脚本来循环和读取命令,然后调用 eval

让 docker 容器读取到该命名管道。

为了能够访问管道,您需要通过卷安装它。

这类似于 SSH 机制(或类似的基于套接字的方法),但将您正确地限制在主机设备上,这可能更好。另外,您不必传递身份验证信息。

我唯一的警告是要小心你为什么这样做。如果您想创建一种使用用户输入或其他方式进行自我升级的方法,这完全是一件事情,但您可能不想调用命令来获取一些配置数据,因为正确的方法是将其传递为args/volume 进入 docker。另外,请注意您正在评估的事实,因此请考虑一下权限模型。

其他一些答案,例如运行脚本。由于它们无法访问完整的系统资源,因此通常无法在卷下工作,但根据您的使用情况,它可能更合适。

原文由 Bradford Medeiros 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进