如何在 RHEL/CentOS 7 中进行假 chroot

如何在 RHEL/CentOS 7 中进行假 chroot

我想对我的 RHEL 环境进行原始“虚拟化”。这是因为我必须运行几个二进制文件,其硬核路径指向例如。/etc/conf目录。有几个不同的二进制文件实际上需要放置在同一目录中的不同的、冲突的配置。

因此,我想运行从中读取conf的应用程序A /etc/conf,并且想运行从中读取conf的应用程序B /mnt/etc/conf,但实际上“相信”它正在/etc/conf通过提供一个“更改”当前的脚本来读取/通过提供将当前目录位置/mnt来读取。

我认为对于这种类型的操作,你可以使用 fakechroot 来完成,但它不再可用了。那是对的吗?有没有更好的方法来提供这个功能?

答案1

您可以尝试使用 docker 容器。最简单的方法(这样你就不必学习Dockerfile语法)是安装 docker 然后docker run -it centos:<version>(这些实用程序是为 RHEL 版本编写的),然后从容器内部设置所有二进制文件和可执行文件需要的话,退出 shell/容器并使用docker ps来查找容器 ID。

例如:

[root@website ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                  PORTS                   NAMES
42f454cc1c71        centos:latest               "/bin/bash"              About an hour ago   Up About an hour                                sick_davinci

然后使用docker commit保存图像:

docker commit 42f454cc1c71 baseImage

然后运行firstUtil(或任何名称):

docker run -it --rm -v /srv/configs/firstUtil:/etc/conf baseImage /path/to/firstUtil

然后运行secondUtil

docker run -it --rm -v /srv/configs/secondUtil:/etc/conf baseImage /path/to/secondUtil

等等,等等

在上述每个docker run命令中,它将根据您设置的映像在容器中运行该命令,然后--rm一旦给定的命令退出,就会导致该容器被拆除。它--rm很有用,因此实用程序的一次运行不会影响下一次运行,除非实用程序修改了其中的某些内容/etc/conf因为每次命令运行都是容器中第一次运行任何内容。

你可以把这些docker run命令放入脚本或 shell 别名中(如果这样可以更轻松地键入)。

请注意,默认情况下,docker 也会尝试修改主机上的防火墙和路由表。

相关内容