和buildah run
在podman exec
活动容器中运行程序,
buildah-run - Run a command inside of the container.
podman-exec - Execute a command in a running container
但是,只buildah run
支持一个--hostname
选项?为什么这些命令不一致?为什么他们有不同的能力?
换一种方式,buildah 目前有一个损坏的--hostname
选项,但我不清楚为什么它会起作用。使用 podman,该选项会在您设置时设置发射容器和 buildah 已经完成,buildah from
所以不应该buildah from
有--hostname
争论吗?
答案1
buildah run 与支持 --hostname 的 podman run 更接近。
podman exec 必须执行到正在运行的容器中,而 buildah run 和 podman run 创建新容器。
顺便说一句,buildah run 的目的是运行容器来帮助构建容器镜像。 Podman run 的用途更为通用。
答案2
这里的原因需要稍微解释一下,
- 容器是概念上链接的任何命名空间和功能的集合。
- 当容器中的任何进程处于运行状态时,容器正在运行(状态)现在执行。
- 大多数命名空间(除了我认为的用户命名空间)都必须设置前容器正在运行。
- 命名空间中的更改可以被该命名空间中的所有进程看到。
buildah run
启动一个未运行的容器,并初始化这些命名空间。因为它知道命名空间内没有其他东西正在运行,所以它不必担心更改它们的不利影响。podman exec
获取一个正在运行的容器并启动具有相同 PID(和其他)命名空间的另一个进程。因为它不会初始化命名空间,所以命名空间内的任何更改都会影响附加到这些命名空间的所有其他进程。因此,名称空间修改被禁用。