dockerコンテナ内でapt-get updateを実行するとmember 'control.tar': lzma error: Cannot allocate memory
。
スピード:
Debian(bookworm)docker(スリム)コンテナを起動します。
ローカルにビルドされたdebパッケージファイルセットを実行中のコンテナにコピーします。
ローカルにコピーされたファイルに基づいてローカル deb リポジトリを作成する
cd /tmp/local && dpkg-scanpackages -m . > Packages
echo 'deb [trusted=yes] file:/tmp/local /' > /etc/apt/sources.list.d/00_local.list
apt-get --yes update
上記のコマンドはメッセージで失敗します。
dpkg-deb (subprocess): decompressing archive './xyz_amd64.deb' (size=12723480) member 'control.tar': lzma error: Cannot allocate memory
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
dpkg-deb: error: tar subprocess returned error exit status 2
dpkg-scanpackages: error: couldn't parse control information from ./xyz_amd64.deb
この問題は、すべてのコンピュータで発生するわけではありません。 100台を超える機械のうち2台に表示されます。空きメモリが多いようです。
編集1:3つの異なるコンピュータで同じ問題が報告されました。
- 6.1.21.1 - マイクロソフト標準 - WSL2+
- 5.4.8-1.el7.elrepo.x86_64(セントース7)
- 5.15.0-76-ユニバーサル(Ubuntu 20.04)
答え1
問題は、Docker 20.10.8および20.10.9のclone3システムコールの互換性です。回避策は、バージョン20.10.10以降に移行することです。2010年10月20日リリースノート。そうでない場合は、次の方法を使用する必要があります。ハッカー W/A
242 clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7fac716e4990, parent_tid=0x7fac716e4990, exit_signal=0, stack=0x7fac70ee4000, stack_size=0x7fff80, tls=0x7fac716e46c0} <unfinished ...>
243 brk(NULL <unfinished ...>
242 <... clone3 resumed>, 88) = -1 EPERM (Operation not permitted)