目前,我能够在我的开发人员机器上构建一个 Ubuntu 18.04 32 位 chroot,我想知道我是否可以让这个过程发生在一个 docker 容器中。
我使用的过程:
- 解压 ubuntu 基础镜像 (
ubuntu-base-18.04.3-base-i386.tar.gz
) resolve.conf
从主机复制到未解压的文件系统- 挂载
/sys
,/proc
和/dev
- 运行
chroot /location/of/filesystem /bin/bash
进入 chroot 并运行进一步的设置 - 完成后,我卸载所有内容并将
/location/of/filesystem
.
是否可以在 docker 容器中执行相同的方法?
我没有看到任何关于能够从 docker 容器中挂载/卸载文件的信息。
我最初认为我遇到的问题是因为我如何编写由 docker 容器运行的脚本来创建 chroot。
可以在 docker 容器中创建 32 位 chroot。我必须运行一个特权容器,否则我无法将所需的目录/文件系统(例如:)安装
/proc
到 chroot(并且我会收到错误)。我不得不稍微修改一下我使用的步骤:
docker run -t --rm --name "chrootTest" -v $(pwd):/root/<CHROOT_SCRIPT_DIR> --privileged --workdir /root/<CHROOT_SCRIPT_DIR> <IMAGE>:<TAG> ./build-chroot.sh <CHROOT_DIR_LOCATION>
/dev
或/sys
进行我正在做的 chroot 修改。(修改包括删除目录/文件/符号链接和apt-get install
-ing 一些依赖项。我只需要/proc
为这些操作挂载,但如果你正在做不同的事情,你可能需要挂载其他目录。)<CHROOT_DIR_LOCATION>
并将其从主机复制resolve.conf
到未解压缩的文件系统,同时还为挂载创建任何所需的目录。chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF
tar
启动了 chroot 文件系统,并删除了 workdir<CHROOT_DIR_LOCATION>
,脚本结束并删除了 docker 容器。由于卷挂载,带有新创建的 chroot 的 tar 存档仍然存在于运行 docker 命令的主机上。
我使用 docker 来更改 Ubuntu 安装程序 live CD。它包含一个
casper/filesystem.squashfs
类似于chroot
环境的;即,它是一个完整的根文件系统,在安装过程中被写入目标文件系统。我对filesystem.squashfs
这样的进行了更改:此时,现在停止的容器
squashfs-mine
包含原始文件系统,以及在其run
. 您现在可以export
将容器的文件系统作为 tar 存档:就我而言,我想
filesystem.squashfs
在原始内容中生成一个新*.iso
内容并重新打包*.iso
:...但您的需求可能不同。