在Docker容器内执行主机命令

10

我正在寻找一种方法,使用户能够从容器/浏览器访问主机并执行有限的命令,而无需每次都需要使用SSH连接到主机,例如make startmake stop等命令。这些make命令只是执行一系列docker-compose命令,在开发中有时需要使用。

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

  • 通过浏览器内的cloud9终端(我们已经在使用它)。默认情况下,此终端仅访问容器本身。
  • 通过自定义迷你Web应用程序(例如node.js / express),其按钮映射到命令。如果在主机上运行,这将很容易实现,但我希望将所有此类代码保留为容器。

感谢您澄清访问主机进程违反了Docker的方法论。我想答案是,我需要一个非Docker进程(例如Web服务器),直接在主机上运行,而不是在容器内部运行。 - rgareth
1
这个回答解决了你的问题吗?如何从Docker容器中在主机上运行shell脚本? - Maicon Mauricio
4个回答

14

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

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


4

命名管道可以非常有用,可以从docker上运行命令来控制主机。您的问题与此问题非常相似。

解决方案也在同一个问题中给出了使用命名管道的方法。我已经尝试并测试过这种方法,它完美地工作。


-6

这种方法会违反Docker的进程/资源封装概念。使用Docker,您可以完全从主机和其他容器(除非您链接容器/卷)中封装进程。由于进程命名空间,在Docker容器内部,您无法看到主机上运行的任何进程。现在,如果您想要在容器内部从主机上执行进程,那将违反Docker的方法论。


-7

容器不应该突破界限并访问主机。Docker 是进程隔离,除此之外还有其他功能。但是在设置时,您可能会发现各种技巧来在主机上执行一些代码。


实际上,我不同意这一点。有些经理之所以想这样做,是因为这是一种自包含的软件打包方式,可以包含所有依赖项。 - Owl

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