错误提示
Dockerfile
使用的是这个 https://github.com/gnulife/dphp
php7 在 issue 里看到解决方案了可以 build 成功了 php5 一直不行 不知道要修改哪里 笔记本上可以 build 成功的 dockerfile 拷过来还是不行一样的错误 不知道咋办了。选程序员节点了 人多^_^
1
qwertyzzz OP 图好像反了。。
|
2
SolidZORO 2018-05-08 08:50:54 +08:00 via iPhone
看起来像是 apk 找不到这些包,你先进基础容器都 apk add 看看上面的依赖是否都能装成功。
假如网络不好,建议把 apk 源换成阿里云的 repo。 |
3
mritd 2018-05-08 09:27:10 +08:00 via iPhone
Php 我建议你不要用 alpine 了,php 安装软件有时候会 build 很多东西,好多依赖可能并不兼容,就算你解决了,下次升级又得很难受的去改,说实话我也干过这种强行 alpine 的事,后来发现得不偿失
|
4
war1644 2018-05-08 09:42:08 +08:00
首先:alpine 是没有预编译好的 php-memcachep /redis 等等的,这个时候就需要自己编译;
下面我就教你如何用 alpine 的 php5 编译扩展: * ``` # 编译 php 扩展镜像 # author [email protected] # 这个镜像基于你前面的那个 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 讨论 |
5
war1644 2018-05-08 09:45:25 +08:00
修正上一层的说法:alpine 的 php5 是没有 memcache 和 redis 等扩展的,但是 php7 有,这些也是别人编译成 apk 的。
|
6
wenerme 2018-05-08 09:50:29 +08:00
目前在维护 Alpine 的包, 如果收到的反馈较多, 可以在官方仓库中构建相关的包, 因为 PHP5 相对用的较少了, 所以没有太关心
|
7
hteen 2018-05-08 09:53:33 +08:00
想用 alpine 就 FROM php:alpine + 自己想装的扩展
最好还是 FROM php:latest + 自己的扩展 像#3 楼说的, 强行 alpine, 最后发现得不偿失 |
8
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 |
9
qwertyzzz OP @wenerme 额 看不懂 我是用的 docker for windows 想知道这个项目这个咋解决啊。。本身不是很熟悉 docker 就会几个简单命令。。
|
11
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 |
12
yuhr123 2018-05-08 18:55:24 +08:00
楼主直接用 Alpine 裸构建 PHP 是认真的吗?
官方可是给你提供了各种 PHP 版本的 alpine 镜像,你真不打算在官方镜像的基础上安装扩展构建自己的镜像? |