現在、開発者のマシンでUbuntu 18.04 32ビットchrootをビルドできますが、Dockerコンテナー内でプロセスを実行できるかどうかを知りたいと思いました。
私が使用するプロセス:
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コンテナ内からファイルをマウント/アンマウントできることについては何もわかりません。
私が最初に抱えていた問題は、chrootを作成するためにdockerコンテナーによって実行されるスクリプトをプログラムした方法にありました。
Dockerコンテナに32ビットのchrootを作成することができます。 特権コンテナを実行する必要がありましたそうでないと、必要なdir /ファイルシステム(例:_/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
_をマウントする必要はありません。 (変更は、ディレクトリ/ファイル/シンボリックリンクの削除といくつかの依存関係の_apt-get install
_-の削除で構成されます。これらのアクションのために_/proc
_をマウントするだけで済みましたが、他のディレクトリをマウントする必要があるかもしれません。)<CHROOT_DIR_LOCATION>
_に解凍し、resolve.confをホストから解凍されたファイルシステムにコピーすると同時に、マウントに必要なdirを作成します。chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF
_<CHROOT_DIR_LOCATION>
_を削除すると、スクリプトが終了し、Dockerコンテナーが削除されます。ボリュームがマウントされているため、新しく作成されたchrootを含むtarアーカイブは、dockerコマンドを実行しているホストに引き続き存在します。