【发布时间】: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