Search code examples
bashdockerdockerfiledebianapt

Impossible to install packages while docker build


I am building a docker using the php:7.4-apache-buster image on a laptop running Debian 11.

Inside my Dockerfile, I run some apt-get update/install command + some docker-php-ext-configure:

RUN apt-get update && apt-get install -y --no-install-recommends apt-utils libzip-dev libssl-dev vim \
## Zip extension
&& apt-get install -y --no-install-recommends zlib1g-dev \
&& docker-php-ext-install zip \
## gd  & other image extentions
&& apt-get install -y --no-install-recommends libpng-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-configure exif && docker-php-ext-install -j$(nproc) exif \
## Other extensions & database utils
&& docker-php-ext-install mysqli pdo pdo_mysql

Then I called a script and inside it I also install some packages:

    package_array=( "apt-utils" "acl" "libzip-dev" "libssl-dev" "vim" "locales" "zlib1g-dev" "libpng-dev" "libfreetype6-dev" "libjpeg62-turbo-dev" "libpng-dev" "git" "unzip" "curl" "libreoffice-base-core" "libreoffice-base-drivers" "libreoffice-core" "libreoffice-common" "libreoffice-writer" "libreoffice-calc" "libreoffice-draw" "libreoffice-impress" "python3" "ghostscript" "default-jdk" "poppler-utils" "openjdk-11-jre-headless" "cron")        
    for pkt in "${package_array[@]}"; do
        apt-get update
        echo -ne "${OK}Installation of $pkt ${RESET}"
        apt-get install -y "$pkt" &>> "$deb_log_path"
        ERR_CODE=$?
        if [ $ERR_CODE -ne 0 ]; then
            echo ""
            echo -e "${FAIL}${RED_CROSS_MARK}[ERR] You will find the log here: ""$deb_log_path""${RESET}"
            echo -e "\\r${FAIL}${RED_CROSS_MARK}[ERR] An error occurred installing '$pkt' (return code $ERR_CODE), exiting..${RESET}"
            exit 
        fi
        echo -e "\\r${OK}${CHECK_MARK} $pkt has been installed.${RESET}"
    done

The problem is that sometimes (like 8 times out of 10) the installation or the update of packages end up with a message like this:

    E: Failed to fetch http://deb.debian.org/debian/pool/main/x/xdg-utils/xdg-utils_1.1.3-1+deb10u1_all.deb  Unable to connect to deb.debian.org:http: [IP: 199.232.178.132 80]
    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

It happens at random time and with random package or during update. I already tried:

  • Change the sources.list with a COPY sources.list /etc/apt/sources.list
  • Rewriting the resolv.conf with public DNS: RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf && echo "nameserver 8.8.4.4" > /etc/resolv.conf
  • Add a apt update in my loop when installing my packages via the script (see the code above)
  • Run all my apt-update instruction in the dockerfile on the same line
  • Use a docker-compose file and add the following line: network_mode: "host"

Nothing seems to work, sometimes my build will end up with no error and most of the times it will with an error. I already searched online for help, but even if it seems that I am not the first to experience this, nothing solve my issue

EDIT: I will probably close this topic for now as it seems that supressing the line network_mode: "host" from my docker-compose file is really improving my build success rate. But, still this all thing seems really odd


Solution

  • As I explained in my edit of my first question, the build appears to work for now. I will mark this answer as the resolution within a two days delay. If anyone has the explanation of why this is working this way I am listening, because as for now I don't know how this is working (and it's frustrating)

    EDIT: Just launch the build with docker-compose build && docker-compose up -d works perfectly fine.