Moritz Vogt
Moritz Vogt

Reputation: 159

Unable to add PPA ondrej\PHP in Dockerfile

I want to extend the httpd Image with PHP and some PHP Modules. My Dockerfile for this looks like this.

FROM httpd:2.4                                 
                                           
COPY forma.conf /etc/apache2/sites-available/  
                                           
RUN apt-get update && apt-get install -y \     
    nano \                                     
    software-properties-common   

RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php           
                                                                                          
RUN apt-get -y update && apt-get install -y \  
    php7.2 \                               
    libapache2-mod-php7.2 \                
    php7.2-common \                        
    php7.2-mysql \                         
    php7.2-gmp \                           
    php7.2-ldap \                          
    php7.2-curl \                          
    php7.2-intl \                          
    php7.2-mbstring \                      
    php7.2-xmlrpc \                        
    php7.2-gd \                            
    php7.2-bcmath \                        
    php7.2-xml \                           
    php7.2-cli \                           
    php7.2-zip        

The error I'm getting when building the Image is followingDocker error

What am I´m doing wrong?

Edit: Thanks to @RJK On step 5/6 your are running add-apt-repository -y ppa:ondrej\php, it should be add-apt-repository -y ppa:ondrej/php (forward slash)

Now the script can find the ppa, but there is another error. enter image description here

Upvotes: 1

Views: 11092

Answers (2)

SyedAsadRazaDevops
SyedAsadRazaDevops

Reputation: 387

I would recommend you start with this specific Dockerfile and install everything you need:

FROM php:7.4 as php

RUN apt-get update && apt-get install -y software-properties-common
RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

RUN apt-get install -y unzip libpd-dev libcurl14-gnutls-dev 
RUN docker-php-ext-install gd dev zip curl mongodb mbstring xml fpm

GOOD, LUCK! @syedasadrazadevops

Upvotes: 0

Freshleaf Media
Freshleaf Media

Reputation: 392

The httpd image is based on Debian and the ondrej repo is designed for Ubuntu, the two are related but it is going to cause you problems.

When add-apt-repository runs it adds the PPA for your current system version, the httpd image is using Debian buster which is equivalent to Ubuntu hirsute (21.04) which isn't released and there is no packages in the PPA for it. You can work around this by doing the import manually and specifying an ubuntu version (groovy in this case):

RUN apt-get update && apt-get install gpg && echo -n 'deb http://ppa.launchpad.net/ondrej/php/ubuntu groovy main' > /etc/apt/sources.list.d/ondrej-ubuntu-php-groovy.list && \
        apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 14AA40EC0831756756D7F66C4F4EA0AAE5267A6C

However you are just going to run into further problems. I would recommend starting with an Ubuntu base and installing everything you need:

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y software-properties-common

RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

RUN apt-get update -y && apt-get install -y apache2

RUN apt-get update -y && apt-get install -y php7.2 \
    libapache2-mod-php7.2 \
    php7.2-common \
    php7.2-mysql \
    php7.2-gmp \
    php7.2-ldap \
    php7.2-curl \
    php7.2-intl \
    php7.2-mbstring \
    php7.2-xmlrpc \
    php7.2-gd \
    php7.2-bcmath \
    php7.2-xml \
    php7.2-cli \
    php7.2-zip
Sending build context to Docker daemon  4.608kB
Step 1/5 : FROM ubuntu:20.04
 ---> f63181f19b2f
Step 2/5 : RUN apt-get update && apt-get install -y software-properties-common
 ---> Running in 375ea87dedcf
[snip]
 ---> 01f569d22228
Removing intermediate container 375ea87dedcf
Step 3/5 : RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
 ---> Running in b28c033f910c
[snip]
 ---> cbc543280aac
Removing intermediate container b28c033f910c
Step 4/5 : RUN apt-get update -y && apt-get install -y apache2
 ---> Running in 63de13b5676e
[snip]
 ---> 917b1cdcd5c3
Removing intermediate container 63de13b5676e
Step 5/5 : RUN apt-get update -y && apt-get install -y php7.2     libapache2-mod-php7.2     php7.2-common     php7.2-mysql     php7.2-gmp     php7.2-ldap     php7.2-curl     php7.2-intl     php7.2-mbstring     php7.2-xmlrpc     php7.2-gd     php7.2-bcmath     php7.2-xml     php7.2-cli     php7.2-zip
 ---> Running in fe46743f3534
[snip]
 ---> ce93f9470361
Removing intermediate container fe46743f3534
Successfully built ce93f9470361

It's worth noting that there is a warning about setting the correct locale in the PPA description, it should be: LC_ALL=C.UTF-8

Upvotes: 5

Related Questions