如何在Docker容器上运行主机上的shell脚本?

如何从docker集装箱控制主机?

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

这真的取决于你需要什么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 

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

我知道这是一个老问题,但理想的解决scheme可能是通过SSH连接到主机,并执行如下命令:

 ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}" 

展开user2915097的 回应 :

隔离的想法是能够非常清楚地限制应用程序/进程/容器(无论你的angular度是什么)可以对主机系统做什么。 因此,能够复制和执行一个文件将真正打破整个概念。

是。 但有时候这是必要的。

不,情况并非如此,或者Docker不是正确的使用方式。 你应该做的是为你想要做的事情声明一个清晰的接口(例如更新一个主机configuration),然后编写一个最小的客户机/服务器来完成这个工作。 但是,一般来说,这似乎不是很理想。 在许多情况下,你应该简单地重新考虑你的方法,并根除这种需求。 当基本上所有东西都是使用某种协议可访问的服务时,Docker进入了一个存在状态。 我想不出Docker容器的任何适当的用例,获得在主机上执行任意东西的权利。

正如Marcus提醒的那样,docker基本上就是进程隔离。 从docker 1.8开始,您可以在主机和容器之间双向复制文件,请参阅docker cp的文档

https://docs.docker.com/reference/commandline/cp/

一旦文件被复制,你可以在本地运行