无法在 Dockerfile 中添加 PPA ondrej\PHP

Unable to add PPA ondrej\PHP in Dockerfile

我想用 PHP 和一些 PHP 模块扩展 httpd 镜像。我的 Dockerfile 看起来像这样。

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        

我在构建图像时遇到的错误如下

我做错了什么?

编辑: 感谢@RJK 在步骤 5/6 你是 运行 add-apt-repository -y ppa:ondrej\php,它应该是 add-apt-repository -y ppa:ondrej/php(正斜杠)

现在脚本可以找到ppa,但是还有一个错误。

httpd 映像是基于 Debian 的,而 ondrej 存储库是为 Ubuntu 设计的,两者是相关的,但它会给你带来问题。

当 add-apt-repository 运行s 它为您当前的系统版本添加 PPA 时,httpd 映像使用的是 Debian buster,它等同于 Ubuntu hirsute (21.04),它不是t 发布并且 PPA 中没有它的包。 您可以通过手动导入并指定 ubuntu 版本(在本例中为 groovy)来解决此问题:

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

然而,您将 运行 陷入更多问题。我建议从 Ubuntu 基础开始并安装你需要的一切:

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

值得注意的是PPA description中有关于设置正确语言环境的警告,应该是:LC_ALL=C.UTF-8