我正在运行一些应用程序,其中应用程序必须知道它在PODMAN内部运行,没有任何额外的env变量,但容器中的PODMAN配置必须提供细节,而没有任何用户交互。
现在,我正在使用cat/proc/self/cgroup | grep-I’机器。slice/libpod-*'
容器内部开始使用podman检查进程是否在容器内部。
有没有更好的方法来处理同样的问题?
从纯理论的角度来看,使用/proc/self/cgroup
的方法是个坏主意,由于不能保证容器引擎不会在新的cgroup命名空间中生成容器,因此容器化进程会将其当前cgroup简单地视为/
,如以下示例所示(unshare-C
此处模拟容器引擎在启动容器时取消cgroup命名空间):
$ podman run -it --privileged archlinux/base
[root@da0277b524db /]# unshare -C
-sh-5.0# cat /proc/self/cgroup
12:freezer:/
11:perf_event:/
10:pids:/
9:blkio:/
8:hugetlb:/
7:rdma:/
6:cpu,cpuacct:/
5:cpuset:/
4:net_cls,net_prio:/
3:memory:/
2:devices:/
1:name=systemd:/
0::/
从实际的角度来看,容器引擎似乎关心与此技巧的兼容性,例如,Moby默认使用主机cgroup命名空间,而Podman似乎也使用主机cgroup命名空间,因此这种流行的脏检查应该会成功,但它仍然是对无意的隔离破坏的利用,自从cgroup名称空间不存在时就存在了。
什么是替代方案?
当具体谈到Podman时,容器引擎似乎在容器规范创建过程中插入了一个特殊的环境变量,以指示容器化过程是使用特定的容器引擎启动的。因此,即使您在没有任何附加变量的情况下启动容器,您也可能会发现容器
变量在其位置上:
$ podman run -it alpine
/ # env | grep container
container=podman
虽然这种方法也不是防弹的(因为没有任何东西可以阻止容器创建者重写这个变量),但我觉得它比使用/proc/self/cgroup
的技巧要好得多,因为这些东西是由容器引擎有意提供的,不太可能在无意中被重写,因为该变量不遵循一般命名约定,也不使用ALL_CAPS
样式。
Podman 是 Libpod 的一部分,它的定义可以简单用这个命令表示:`alias docker=podman` Libpod 是一个创建容器 pod 的工具和库,它包含 pod 管理工具 Podman,Podman 管理 pod、容器、容器镜像和容器卷。 在较高的层面上,Libpod 和 Podman 的作用范围如下: 支持多种镜像格式,包括 OCI 和 Docker。 支持多种方式下载镜像
Podman 是 Red Hat 开源的容器运行时项目,它的功能与 Docker 几乎重合,甚至还有很多新增的功能,它与 Docker 等容器运行时最大的差异是不需要运行守护进程。 默认情况下,Podman 是不提供静态二进制文件的,你需要安装完整的依赖才能正常使用,而且只支持特定几个发行版,其他发行版需要自己从头编译。podman-static 这个项目就是为了解决这个问题,它提供了 Podma
Podman Compose 项目作为 Docker Compose 的替代品,而不需要对 docker-compose.yaml 文件进行任何修改。由于 Podman Compose 使用吊舱 pod 工作。Podman Compose 的基本思想是,它选中 docker-compose.yaml 文件里面定义的服务,为每个服务创建一个容器。Docker Compose 和 Podman Com
我想运行podman作为运行CI/CD管道的容器。然而,我一直从podman容器中得到这个错误: 我使用Jenkins Kubernetes插件来编写CI/CD管道,这些管道在Kubernetes集群中作为容器运行。我已经成功地编写了使用Docker-in-Docker容器来运行< code>docker build和< code>docker push命令的管道。 然而,在容器中运行Docker
Podman for macOS 是 macOS 平台的 Podman 前端,它可以用来启动和停止 Podman 虚拟机及其运行的容器。如果你还没有通过 podman machine 设置虚拟机,该应用程序会帮你自动设置并启动。
我在尝试使用Podman在RedHat 8上运行OpenMaptileServer时遇到问题。 这是我的开始脚本: 图像拉得很好,而且开始看起来很好。我可以执行 看看那个容器。一切看起来都很好。如果我用 我没有看到任何我认为是一个问题,但是当我试图击中主页http://localhost:8080,然后我得到站点未找到的错误。 我想这可能是防火墙的问题,所以我禁用了防火墙,但结果相同。我还通过安装