在Docker容器中执行主机命令

我正在寻找一种方式让用户能够在主机上执行一组有限的命令,而只能从容器/浏览器访问它。 我们的目标是防止需要通过SSH连接主机来偶尔运行命令,如make startmake stop等。这些命令只是执行一系列docker-compose命令,有时在dev中需要。

我能想到的两种可能的方法是:

  • 通过浏览器内的cloud9terminal(我们已经在使用它)。 默认情况下,这个terminal当然只能访问容器本身。
  • 通过定制迷你web应用程序(例如node.js / express)和映射到命令的button。 如果在主机上运行,​​这将很容易做到,但是我想把所有这样的代码保存为容器。

虽然这可能不是最佳实践,但仍然可以从容器内部控制主机。 如果您正在运行docker-compose命令,则可以通过在Ubuntu上使用-v /var/run/docker.sock:/var/run/docker.sock来绑定docker套接字。 如果你想使用其他的系统工具,你将不得不使用-v绑定所有需要的卷,当你想使用使用/lib.*.so文件的系统仓时,这会变得非常复杂和繁琐。

如果您需要使用sudo命令,请不要忘记在运行容器时添加--privileged标志

这种做法将违背stream程/资源封装的docker概念。 使用docker,您可以完全从主机和相互之间封装进程(除非链接容器/卷)。 在Docker容器中,由于进程名称空间,您看不到主机上运行的任何进程。 当你现在想在一个容器内执行主机上的进程时,会违背docker方法。

一个容器不应该爆发并访问主机。 Docker是(除其他外)进程隔离。 不过,你可能会发现在主机上执行一些代码的各种技巧。