【问题标题】:Execute host commands from within a docker container从 docker 容器中执行主机命令
【发布时间】:2015-10-21 15:26:16
【问题描述】:

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

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

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

【问题讨论】:

  • 感谢您澄清访问主机进程违反 docker 方法。我想答案是我需要一个直接在主机上而不是在容器内运行的非 docker 进程(例如 webserver)。

标签: security docker


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这种方法违反了process/resources encapsulation 的 docker 概念。使用 docker,您封装 进程完全来自主机和彼此(除非您链接容器/卷)。由于process namespaces,在 docker 容器中,您无法看到主机上运行的任何进程。当您现在想要从容器内执行主机上的进程时,这将违反 docker 方法。

    【讨论】:

      【解决方案3】:

      容器不应该突破并访问主机。 Docker(除其他外)是进程隔离。但是,当您设置它时,您可能会发现在主机上执行某些代码的各种技巧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-12
        • 2020-07-28
        • 2022-01-14
        • 2016-03-19
        • 2023-01-28
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        相关资源
        最近更新 更多