【问题标题】:Chroot multiple commans in docker containerdocker容器中的chroot多个命令
【发布时间】:2021-11-22 21:14:54
【问题描述】:

我正在使用 docker 容器在 chroot 环境中执行多个命令。我的计划是执行这样的事情:

chroot /host sh -c "command1 | command2; command3"

显然命令占位符替换为适当的东西。

我设法完成这项工作的唯一方法是使用脚本文件:

script.sh:

command1 | command2
command3

然后像这样设置容器的 Cmd 属性:

Cmd: [ "chroot", "/host", "./script.sh" ]

虽然没有:

"Cmd": [ "chroot", "/host", "sh", "-c", "\"command1 | command2; command3\"" ]

这也不是:

"Cmd": "chroot /host sh -c \"command1 | command2; command3\""

(也试过单引号)

如何在不需要在文件系统上使用脚本文件的情况下让命令工作? 提前感谢任何可以提供帮助的人。

【问题讨论】:

  • 一个 Docker 容器实际上已经是一个美化的 chroot 环境;为什么需要将它们结合起来? (您是否将整个主机文件系统绑定挂载到容器的 /host 目录并 chroot 到该目录中;在这种情况下,为什么不直接在主机系统上运行命令,而无需多次更改文件系统上下文?)
  • 是的,我正在安装整个系统。我这样做(而不是仅仅在一个简单的 shell 中执行)是因为我使用 Azure IoT Edge 系统将容器分布在多个边缘设备上。这样,我可以以分布式方式在多个设备上运行命令(例如,如果我需要更新 1000 台设备上的 azure 守护程序,我可以使用运行更新命令的容器来完成)。我知道这是一个奇怪的想法,但它有效---

标签: docker shell command chroot


【解决方案1】:

没关系,命令周围的双引号的问题。这有效:

"Cmd": [ "chroot", "/host", "sh", "-c", "command1 | command2; command3" ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多