【问题标题】:Docker Compose - Installing php-fpm with MySQLi, MySQLnd and PDO extensionsDocker Compose - 使用 MySQLi、MySQLnd 和 PDO 扩展安装 php-fpm
【发布时间】:2017-09-17 11:40:41
【问题描述】:

我正在尝试在计算机 (Mac) 上设置 docker,但无法编译 PDO_mysql 扩展。

我的 docker-compose 文件如下所示

version: '2'
  services:
    nginx:
        image: tutum/nginx
        ports:
            - "80:80"
        links:
            - phpfpm
        volumes:
            - ./nginx/conf:/etc/nginx/sites-available/
            - ./nginx/conf:/etc/nginx/sites-enabled/

            - ./logs/nginx-error.log:/var/log/nginx/error.log
            - ./logs/nginx-access.log:/var/log/nginx/access.log
    phpfpm:
        build: ./php
        ports:
            - "9000:9000"
        volumes:
            - ./Sites:/usr/share/nginx/html
    mysql:
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD: admin
      ports:
        - "3306:3306" 

我的 Dockfile 如下所示:

FROM php:5.6-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt mysqli \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd 

上述文件工作正常,但如果在最后一个文件中,如果我添加 mysqlnd 我无法构建我的 php。

            Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
            Installing header files:           /usr/local/include/php/
            find . -name \*.gcno -o -name \*.gcda | xargs rm -f
            find . -name \*.lo -o -name \*.o | xargs rm -f
            find . -name \*.la -o -name \*.a | xargs rm -f 
            find . -name \*.so | xargs rm -f
            find . -name .libs -a -type d|xargs rm -rf
            rm -f libphp.la       modules/* libs/*
            + cd mysqlnd
            + phpize
            Cannot find config.m4. 
            Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

            ERROR: Service 'phpfpm' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y       libfreetype6-dev        libjpeg62-turbo-dev         libmcrypt-dev       libpng12-dev    && docker-php-ext-install -j$(nproc) iconv mcrypt mysqli mysqlnd    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/  && docker-php-ext-install -j$(nproc) gd' returned a non-zero code: 1

我做错了什么?

请指教。

谢谢

【问题讨论】:

    标签: php docker docker-compose


    【解决方案1】:

    我只是丢弃了 tutum 图片并使用了 Quay.io 图片

    image: quay.io/ignited/php-nginx-fpm:5.6.30-latest

    这一行给我带来了奇迹。 我得到了包含所有必需库的 php-fpm,这些库通常预先安装在托管服务器上。

    我希望它可以帮助那些浪费了几天时间试图弄清楚的人。

    【讨论】:

    • 有 7+ 版本吗?
    • 现在我正在使用github.com/richarvey/nginx-php-fpm。它有所有版本。
    【解决方案2】:

    我建议您在 Dockerfile 中添加以下行:

    RUN apt-get install -y libbz2-dev \
        && docker-php-ext-install bz2
    

    【讨论】:

    • FROM php:5.6-fpm RUN apt-get update && apt-get install -y \ libbz2-dev \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng12-dev \ && docker-php-ext-install -j$(nproc) bz2 iconv mcrypt mysqli mysqlnd pdo pdo_mysql zip \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd 还是不行。 Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module
    • 这是手动构建的。我不是手动构建的。我只在 Dockerfile 中编写命令,而 docker 正在运行它们。从技术上讲,docker 应该在正确的目录中运行 phpize。顺便说一句,我有孤立的问题,它只是 mysqlnd
    【解决方案3】:

    我认为要在 phpfpm 容器上使用 mysql,您只需要将这个 mysql 容器链接到它们。

    phpfpm:
            build: ./php
            links:
                - mysql 
            ports:
                - "9000:9000"
            volumes:
                - ./Sites:/usr/share/nginx/html
    

    如果您需要工作示例,请查看我在 github 上的 docker-compose。

    https://github.com/Arkowsky/docker_symfony/blob/master/docker-compose.yml

    如果您决定在 mac 和 docker 上使用 symfony,您可能会遇到性能问题 - 我在 github 上的上述存储库中对此进行了描述。

    有任何问题,请告诉我。

    【讨论】:

    • 我正在使用 Symfony/Laravel 和 Docker。在这种情况下你有什么建议?
    • 这也没用rm -f libphp.la modules/* libs/* + cd mysqlnd + phpize Cannot find config.m4. Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module ERROR: Service 'phpfpm' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y libbz2-dev libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev && docker-php-ext-install -j$(nproc) bz2 iconv mcrypt mysqli mysqlnd pdo pdo_mysql zip && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-instal