无法在 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
我想用 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