dockerを使ってchrootを構築する方法は?

dockerを使ってchrootを構築する方法は?

現在開発中のコンピュータで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/bashchrootで実行し、追加設定を実行してください。
  • 完了したら、すべてを削除します/location/of/filesystem

Dockerコンテナ内でも同じ方法を実行できますか?

Dockerコンテナ内でファイルをマウント/マウント解除する方法については何も表示されません。

ベストアンサー1

最初に遭遇した問題は、chrootを生成するためにdockerコンテナで実行されるスクリプトを書く方法にあったようです。

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マウントしたりchrootする必要はありません/sys。 (修正には、ディレクトリ/ファイル/symlinkの削除といくつかのapt-get install依存関係の指定が含まれます。これらの操作だけをマウントする必要がありますが/proc、他の作業を実行する場合は、別のディレクトリをマウントする必要があるかもしれません。)
  • スクリプトはアーカイブを抽出してホストから抽出されたファイルシステムにコピーし、インストール<CHROOT_DIR_LOCATION>resolve.conf必要なディレクトリも作成します。
  • その後、chrootに移動して必要な設定を実行するheredocがあります。 chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF
  • 設定が完了すると、tarchrootファイルシステムを起動し、workdirを削除し、<CHROOT_DIR_LOCATION>スクリプトを終了し、dockerコンテナを削除しました。

ボリュームマウントのために新しく作成されたchrootを含むtarアーカイブは、dockerコマンドを実行しているホストにまだ存在します。

おすすめ記事