alpine php5 构建出错

2018-05-08 02:23:52 +08:00
 qwertyzzz

错误提示

Dockerfile

使用的是这个 https://github.com/gnulife/dphp

php7 在 issue 里看到解决方案了可以 build 成功了 php5 一直不行 不知道要修改哪里 笔记本上可以 build 成功的 dockerfile 拷过来还是不行一样的错误 不知道咋办了。选程序员节点了 人多^_^

3630 次点击
所在节点    程序员
12 条回复
qwertyzzz
2018-05-08 02:24:05 +08:00
图好像反了。。
SolidZORO
2018-05-08 08:50:54 +08:00
看起来像是 apk 找不到这些包,你先进基础容器都 apk add 看看上面的依赖是否都能装成功。

假如网络不好,建议把 apk 源换成阿里云的 repo。
mritd
2018-05-08 09:27:10 +08:00
Php 我建议你不要用 alpine 了,php 安装软件有时候会 build 很多东西,好多依赖可能并不兼容,就算你解决了,下次升级又得很难受的去改,说实话我也干过这种强行 alpine 的事,后来发现得不偿失
war1644
2018-05-08 09:42:08 +08:00
首先:alpine 是没有预编译好的 php-memcachep /redis 等等的,这个时候就需要自己编译;
下面我就教你如何用 alpine 的 php5 编译扩展:
*
```
# 编译 php 扩展镜像
# author ahmerry@qq.com
# 这个镜像基于你前面的那个 php5 镜像,注意修改掉
FROM ucse/php5
# tools php5-pear 就是 pecl,这个懂吧?装扩展的
RUN apk --no-cache add alpine-sdk php5-pear
# common dependency
RUN apk --no-cache add libressl-dev zlib-dev php5-dev autoconf
# bug fix
RUN \
# 高版本 alpine 建立软链很重要,有些程序默认跑去找 php(php7)
if [ ! -e /usr/bin/php ]; then \
ln -s /usr/bin/php5 /usr/bin/php; \
fi; \
# 感觉这像是个 php 官方 bug ( https://serverfault.com/questions/589877/pecl-command-produces-long-list-of-errors
sed -i "s|\-n||g" /usr/bin/pecl && \
pecl update-channels && \
rm -rf /tmp/pear ~/.pearrc
# 编译 amqp swoole 需要
RUN apk --no-cache add rabbitmq-c-dev nghttp2-dev hiredis-dev
ENTRYPOINT ["sh"]
```
* 好了基于以上构建好镜像,run 起来!
* `docker exec` 进入镜像后 执行:`pecl install -o -f redis `
* 编译完后`docker cp php-builder:/usr/lib/php5/modules/reids.so ../modules/;`
* 好了,现在你拥有 redis 扩展了

#### 补充
其实以上已经构建起来一个有编译功能的镜像了,不一定非要走 pecl 模式装!更多方式,欢迎扩展。
喜欢 alpine 的欢迎加 qq 群 558299436 讨论
war1644
2018-05-08 09:45:25 +08:00
修正上一层的说法:alpine 的 php5 是没有 memcache 和 redis 等扩展的,但是 php7 有,这些也是别人编译成 apk 的。
wenerme
2018-05-08 09:50:29 +08:00
目前在维护 Alpine 的包, 如果收到的反馈较多, 可以在官方仓库中构建相关的包, 因为 PHP5 相对用的较少了, 所以没有太关心
hteen
2018-05-08 09:53:33 +08:00
想用 alpine 就 FROM php:alpine + 自己想装的扩展

最好还是 FROM php:latest + 自己的扩展

像#3 楼说的, 强行 alpine, 最后发现得不偿失
wenerme
2018-05-08 10:35:55 +08:00
没有哪个发布版的的仓库包含所有 PHP 扩展, 当遇到没有的时候, 建议用 docker 多阶段构建来自己添加, 基于 Alpine 做下来也非常简单, 参考 https://github.com/wenerme/dockerfiles/blob/master/php/5-app/Dockerfile

例如我在 wener/php:5-app 中添加了 redis
docker run --rm -it wener/php:5-app php -m | grep redis
qwertyzzz
2018-05-08 16:02:58 +08:00
@wenerme 额 看不懂 我是用的 docker for windows 想知道这个项目这个咋解决啊。。本身不是很熟悉 docker 就会几个简单命令。。
qwertyzzz
2018-05-08 16:03:19 +08:00
@hteen 自己的扩展是啥意思啊、
hteen
2018-05-08 17:03:07 +08:00
@qwertyzzz 意思就是基础镜像用官方的, 再用官方提供的 docker-php-ext-install 命令在 Dockerfile 里安装你需要的其他 PHP 扩展

ps1: https://github.com/docker-library/docs/tree/master/php#how-to-install-more-php-extensions
ps2: https://github.com/hteen/docker-php/blob/5.6.35-fpm/Dockerfile
yuhr123
2018-05-08 18:55:24 +08:00
楼主直接用 Alpine 裸构建 PHP 是认真的吗?
官方可是给你提供了各种 PHP 版本的 alpine 镜像,你真不打算在官方镜像的基础上安装扩展构建自己的镜像?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX