能否在标准的Alpine 3.12 Docker镜像上安装PHP7.4?

11

能否在原生Alpine 3.12 Docker镜像上安装PHP7.4?

我看到了这个repo和它的dockerfile,使用了bintray证书和存储库路径,但我想知道是否有更多“标准/Alpine”方式本地完成此操作的方法?

3个回答

14

您可以使用下面的Docker镜像。

FROM alpine:3.12
RUN apk add --no-cache  --repository http://dl-cdn.alpinelinux.org/alpine/edge/community php
RUN php -v

输出

Step 3/3 : RUN php -v
 ---> Running in 9900e66f4b71
PHP 7.4.7 (cli) (built: Jun 14 2020 23:46:20) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies


4
不要混合使用两个不同版本的发行版(3.12和edge),只需使用FROM alpine:edge。我已将此作为答案编写,而非评论,以包含详细信息:https://dev59.com/sVIG5IYBdhLWcg3wzU2B#63507256。 - glen
@ElanRuusamäe apine:edge 是一个开发分支,它不仅会安装来自开发分支的 PHP,还会安装所有其他软件包。而在上述 Docker 镜像中,rest 软件包将仅从 alpine:3.12 中使用,只有 php7.4 将从开发分支安装。 - Adiii
这就是问题所在,php on edge是使用来自edge的库构建的,但您安装了来自3.12的库和来自edge的php,这会导致链接不兼容,如我链接的帖子中所述,“igbinary.so:php_error_docref0:找不到符号”的示例。 - glen

7

4
使用alpine edge版本:
FROM alpine:edge
RUN apk add php
RUN php -v

这是对Adiii的更新,他建议混合两个alpine版本(3.12edge),这样做会导致糟糕的结果,并且很难理解出了什么问题。你可能会遇到库错误,因为它混合了来自3.12和其他来自edge的软件包:
/ # php -m
PHP Warning:  PHP Startup: Unable to load dynamic library 'igbinary.so' (tried: /usr/lib/php7/modules/igbinary.so (Error relocating /usr/lib/php7/modules/igbinary.so: php_error_docref0: symbol not found), /usr/lib/php7/modules/igbinary.so.so (Error loading shared library /usr/lib/php7/modules/igbinary.so.so: No such file or directory)) in Unknown on line 0 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接