Reputation: 159
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 following
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.
Upvotes: 1
Views: 11092
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
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