メモリ割り当てエラーが原因でPodmanビルドが失敗し、Dockerクリーンアップが失敗する

メモリ割り当てエラーが原因でPodmanビルドが失敗し、Dockerクリーンアップが失敗する

podman buildDockerクリーンアップ操作とメモリ割り当てエラーのため失敗しました。

私の単純化されたコンテナファイルは次のとおりです。

    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 memorywgetアーカイブを解凍しようとしたときに何が起こるかを確認してください。

    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バージョンとは無関係でなければならないと思います。同じバージョンを強制すると当面の問題が解決されるため、この問題を解決することを検討して続行します。

おすすめ記事