Docker

如何使用 docker 建構 chroot?

  • August 28, 2020

目前,我能夠在我的開發人員機器上建構一個 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 命令是: 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到未解壓縮的文件系統,同時還為掛載創建任何所需的目錄。
  • 然後我有一個heredoc進入chroot並進行所需的設置 chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF
  • 設置完成後,我tar啟動了 chroot 文件系統,並刪除了 workdir <CHROOT_DIR_LOCATION>,腳本結束並刪除了 docker 容器。

由於卷掛載,帶有新創建的 chroot 的 tar 存檔仍然存在於執行 docker 命令的主機上。

引用自:https://unix.stackexchange.com/questions/549327