【问题标题】:Unable to add PPA ondrej\PHP in Dockerfile无法在 Dockerfile 中添加 PPA ondrej\PHP
【发布时间】:2021-02-05 11:14:13
【问题描述】:

我想用 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,但还有另一个错误。

【问题讨论】:

  • 在第 5/6 步,您正在运行 add-apt-repository -y ppa:ondrej\php,它应该是 add-apt-repository -y ppa:ondrej/php(正斜杠),我在使用反斜杠时也会收到错误 ERROR: '~ondrejphp' user or team does not exist.
  • 啊,谢谢,现在我又要了。我会更新我的问题
  • 在添加存储库之前尝试运行apt install -y gpg
  • 问题是 httpd 图像的错误基础。

标签: php docker apache dockerfile


【解决方案1】:

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

当 add-apt-repository 运行时,它会为您当前的系统版本添加 PPA,httpd 映像使用的是 Debian buster,它相当于未发布的 Ubuntu hirsute (21.04),并且 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中有关于设置正确locale的警告,应该是:LC_ALL=C.UTF-8

【讨论】:

  • 现在可以使用了,非常感谢。我在哪里可以获得关于 httpd Image 构建的 Base Image 的信息?
  • 它可以更改每个版本的图像,因此最简单的方法是在容器中运行 lsb_release -rc 或测试构建 FROM httpd RUN lsb_release -rc
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2023-02-25
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多