V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwertyzzz
V2EX  ›  程序员

alpine php5 构建出错

  •  
  •   qwertyzzz ·
    123 · 2018-05-08 02:23:52 +08:00 · 3748 次点击
    这是一个创建于 2384 天前的主题,其中的信息可能已经有所发展或是发生改变。

    错误提示

    Dockerfile

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

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

    12 条回复    2018-05-08 18:55:24 +08:00
    qwertyzzz
        1
    qwertyzzz  
    OP
       2018-05-08 02:24:05 +08:00
    图好像反了。。
    SolidZORO
        2
    SolidZORO  
       2018-05-08 08:50:54 +08:00 via iPhone
    看起来像是 apk 找不到这些包,你先进基础容器都 apk add 看看上面的依赖是否都能装成功。

    假如网络不好,建议把 apk 源换成阿里云的 repo。
    mritd
        3
    mritd  
       2018-05-08 09:27:10 +08:00 via iPhone
    Php 我建议你不要用 alpine 了,php 安装软件有时候会 build 很多东西,好多依赖可能并不兼容,就算你解决了,下次升级又得很难受的去改,说实话我也干过这种强行 alpine 的事,后来发现得不偿失
    war1644
        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 讨论
    war1644
        5
    war1644  
       2018-05-08 09:45:25 +08:00
    修正上一层的说法:alpine 的 php5 是没有 memcache 和 redis 等扩展的,但是 php7 有,这些也是别人编译成 apk 的。
    wenerme
        6
    wenerme  
       2018-05-08 09:50:29 +08:00
    目前在维护 Alpine 的包, 如果收到的反馈较多, 可以在官方仓库中构建相关的包, 因为 PHP5 相对用的较少了, 所以没有太关心
    hteen
        7
    hteen  
       2018-05-08 09:53:33 +08:00
    想用 alpine 就 FROM php:alpine + 自己想装的扩展

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

    像#3 楼说的, 强行 alpine, 最后发现得不偿失
    wenerme
        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
    qwertyzzz
        9
    qwertyzzz  
    OP
       2018-05-08 16:02:58 +08:00
    @wenerme 额 看不懂 我是用的 docker for windows 想知道这个项目这个咋解决啊。。本身不是很熟悉 docker 就会几个简单命令。。
    qwertyzzz
        10
    qwertyzzz  
    OP
       2018-05-08 16:03:19 +08:00
    @hteen 自己的扩展是啥意思啊、
    hteen
        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
    yuhr123
        12
    yuhr123  
       2018-05-08 18:55:24 +08:00
    楼主直接用 Alpine 裸构建 PHP 是认真的吗?
    官方可是给你提供了各种 PHP 版本的 alpine 镜像,你真不打算在官方镜像的基础上安装扩展构建自己的镜像?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.