메모리 할당 오류로 인해 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 사이에 핵심적인 차이점이 있습니까? 나는 컨테이너가 데비안 버전과 독립적이어야 한다고 생각합니다. 동일한 버전을 강제 적용하면 당면한 문제가 해결되므로 이 문제를 해결하는 것을 고려하고 계속 진행하겠습니다.

관련 정보