podman build
Dockerクリーンアップ操作とメモリ割り当てエラーのため失敗しました。
私の単純化されたコンテナファイルは次のとおりです。
FROM docker.io/php:8.1-apache
RUN apt-get update
CMD ["apache2-foreground"]
Problem executing scripts APT::Update::Post-Invoke
これにはDockerクリーンアップ操作によって発生したバグがあります。
STEP 1: FROM docker.io/php:8.1-apache
STEP 2: RUN apt-get update
Get:1 http://deb.debian.org/debian bookworm InRelease [147 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [52.1 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8904 kB]
Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [4732 B]
Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [48.0 kB]
Fetched 9204 kB in 1s (8706 kB/s)
Reading package lists...
E: Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code
Error: error building at STEP "RUN apt-get update": error while running runtime: exit status 100
Dockerクリーンアップコマンドを追加して無効にできますが、RUN mv /etc/apt/apt.conf.d/docker-clean /etc/apt/apt.conf.d/docker-clean.disabled
必須ではありません。この問題をどのように正しく解決しますか?次のContainerfile
ビルドとコンテナが実行されます。
FROM docker.io/php:8.1-apache
RUN mv /etc/apt/apt.conf.d/docker-clean /etc/apt/apt.conf.d/docker-clean.disabled
RUN apt-get update
CMD ["apache2-foreground"]
ただし、追加の apt-get コマンドを追加すると、メモリ割り当てエラーが発生する可能性があります。次のapt-get upgrade -y
ように追加しようとすると失敗しますapt-get install -y wget
。
FROM docker.io/php:8.1-apache
RUN mv /etc/apt/apt.conf.d/docker-clean /etc/apt/apt.conf.d/docker-clean.disabled
RUN apt-get update
RUN apt-get install -y wget
CMD ["apache2-foreground"]
ビルド結果でlzma error: Cannot allocate memory
wgetアーカイブを解凍しようとしたときに何が起こるかを確認してください。
STEP 1: FROM docker.io/php:8.1-apache
STEP 2: RUN mv /etc/apt/apt.conf.d/docker-clean /etc/apt/apt.conf.d/docker-clean.disabled
--> Using cache 19e055f778a12ee0e7bdc3b0474e8013dddf7763ffdee6d7c51b04854dbbe48c
--> 19e055f778a
STEP 3: RUN apt-get update
--> Using cache 9acf978dd9eae527716a6684a2f71068005d047526398bf1b74d811e7e3ca006
--> 9acf978dd9e
STEP 4: RUN apt-get install -y wget
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
wget
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 984 kB of archives.
After this operation, 3692 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 wget amd64 1.21.3-1+b2 [984 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 984 kB in 0s (21.4 MB/s)
dpkg-deb (subprocess): decompressing archive '/var/cache/apt/archives/wget_1.21.3-1+b2_amd64.deb' (size=983848) 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: error processing archive /var/cache/apt/archives/wget_1.21.3-1+b2_amd64.deb (--unpack):
dpkg-deb --control subprocess returned error exit status 2
Errors were encountered while processing:
/var/cache/apt/archives/wget_1.21.3-1+b2_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Error: error building at STEP "RUN apt-get install -y wget": error while running runtime: exit status 100
空きメモリが多いようです。以下は、Dockerのクリーンアップを無効にしましたが、まだ別のapt-get操作を実行していないことで実行できるバージョンです。
root@pod_leask:/var/www/html# free
total used free shared buff/cache available
Mem: 24494592 6875476 14715284 128916 3444304 17619116
Swap: 33554428 0 33554428
ベストアンサー1
Debian 12(Bookworm)コンテナが作成されましたが、FROM docker.io/php:8.1-apache
ホストコンピュータではDebian 11(Bullseye)が実行されていました。 Bullseyeを使用して、コンテナがホストと一致するように強制的にBullseyeを使用しますFROM docker.io/php:8.1-apache-bullseye
。 docker-clean問題とメモリ割り当て不能問題が消えました。
これは新しいジョブコンテナファイルです。 (もちろん、ファイル全体はこれより複雑ですが動作します)
FROM docker.io/php:8.1-apache-bullseye
RUN apt-get update
RUN apt-get install -y wget
CMD ["apache2-foreground"]
しかし、これがなぜ重要なのでしょうか?コンテナに影響を与えるBullseyeとNerdの間に重要な違いはありますか?私はコンテナがDebianバージョンとは無関係でなければならないと思います。同じバージョンを強制すると当面の問題が解決されるため、この問題を解決することを検討して続行します。