web-dev-qa-db-ja.com

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/bashを実行してchrootに入り、さらにセットアップを実行します
  • 完了したら、すべてをアンマウントし、/location/of/filesystemをタールアップします。

Dockerコンテナ内でこれと同じ方法を実行することは可能ですか?

Dockerコンテナ内からファイルをマウント/アンマウントできることについては何もわかりません。

1
Wimateeka

私が最初に抱えていた問題は、chrootを作成するためにdockerコンテナーによって実行されるスクリプトをプログラムした方法にありました。

Dockerコンテナに32ビットのchrootを作成することができます。 特権コンテナを実行する必要がありましたそうでないと、必要なdir /ファイルシステム(例:_/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>
  • 私が行っているchrootの変更のために_/dev_または_/sys_をマウントする必要はありません。 (変更は、ディレクトリ/ファイル/シンボリックリンクの削除といくつかの依存関係の_apt-get install_-の削除で構成されます。これらのアクションのために_/proc_をマウントするだけで済みましたが、他のディレクトリをマウントする必要があるかもしれません。
  • スクリプトはアーカイブを_<CHROOT_DIR_LOCATION>_に解凍し、resolve.confをホストから解凍されたファイルシステムにコピーすると同時に、マウントに必要なdirを作成します。
  • 次に、chrootに入り、必要なセットアップを行うヒアドキュメントがあります_chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF_
  • セットアップ後、chrootファイルシステムをtarアップし、workdir _<CHROOT_DIR_LOCATION>_を削除すると、スクリプトが終了し、Dockerコンテナーが削除されます。

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

0
Wimateeka